2011-03-03 11 views
10

escribí una clase Thread.descendent y en el método de ejecución puse un bucle infinito para escuchar un evento com, se considera una mala práctica de Threading usar un ciclo infinito para hacer esto? las aplicaciones funcionan bien, no se congelan y siempre responden, solo respondo porque quiero usar el mejor método para enhebrar.¿Se considera una mala práctica poner un bucle infinito dentro de TThread.Execute?

procedure TMyThread.Execute; 
begin 
    while True and not Terminated do 
    begin 
    AResult:= FListener.GetResult(Param1,Param2,5000); 
     if not VarIsNull(AResult) then 
     Synchronize(Process); 
    end; 
end; 
+13

Si hay un evento que finaliza el ciclo, realmente no es Infinito, ¿o sí? – drudge

+0

¿FListener.GetResult espera si no hay ningún evento? –

+0

Para detener el hilo utilizo 'TMyThread.Terminate', verifique la línea' while True and not Terminated do' donde verifico si el hilo está terminado. ' – Salvador

Respuesta

7

Está bien hacer eso. Está buscando Terminated, lo cual es bueno. Si su oyente lo permite y el uso de su CPU es demasiado alto, puede reducir la velocidad poniendo un Sleep (1) allí, pero creo que no será necesario.

+5

Si bien está técnicamente bien, es totalmente innecesario y hace que el código sea más difícil de leer. Como señaló @David Heffernan, 'True and not Terminated' equivale a 'not Terminated', y el segundo es mucho más fácil de leer. (No downvoting, porque * * está técnicamente bien aunque sea redundante e inútil.) –

+1

Sí. El 'verdadero' podría ser eliminado. Mi respuesta fue más sobre el uso general de un ciclo while en un hilo, de lo que se trata en realidad esta pregunta. – GolezTrol

+1

Y veo que el oyente tiene un tiempo de espera en sí mismo. Eso hace que mi sugerencia de poner un sueño adicional en el hilo sea innecesario. – GolezTrol

14

El compilador transforma esto en:

while not Terminated do 

Cuando escrito de esta manera estoy seguro de que estará de acuerdo en que se ve perfectamente natural. Este es un modismo muy común.

Cuestiones relacionadas