Nunca se debe llamar a suspender en un TThread no es seguro hacerlo y curriculum vitae solo debe usarse para iniciar un hilo que se haya creado suspendido.
En Delphi 2010 se suspendieron y reanudaron donde se depreciaron y se introdujo el método para reforzar esto.
Para una explicación más completa, consulte este thread en los foros de Codegears.
habiendo dicho que hay 2 formas en que terminaré y liberaré un tthread.
1: Configuro FreeOnTerminate cuando se crea el hilo, así que solo llamo.
Thread.Terminate;
2: Liberar el hilo de forma explícita, ya que necesito para leer el resultado de una propiedad pública antes de que se liberó el hilo y después de que haya terminado.
Thread.Terminate;
Thread.WaitFor;
//Do somthing like read a public property from thread object
if Thread <> nil then FreeAndNil(Thread);
En general ejecutar bucle puede ser una buena idea para poner un poco de manejo de excepciones en. O quizás se pregunte por qué el hilo parece poner fin a su auto. Esto puede estar causando el AV si el subproceso está configurado en FreeOnTerminate y ya se ha liberado cuando intenta liberarlo.
procedure TThread.Execute;
begin
while not Terminated do
begin
try
//do something
except
on E:Exception do
//handle the exception
end;
end;
end;
posible duplicado de [libere a un TThread forma automática o manual] (http://stackoverflow.com/questions/3557105/free-a-tthread-either-automatically-or-manually) –
No suspender la amenaza. El método de terminación simplemente establece la propiedad Terminated en verdadero, y su método Execute es responsable de terminar el hilo. Si se suspende, no tendrá la oportunidad de terminar. – jachguate
Otro problema con el código anterior es que probablemente libera el hilo antes de que tenga un cambio para terminar de la manera normal. –