usted tiene que comprobar para terminar en el hilo para que esto funcione. Por ejemplo:
procedure TMyThread.Execute;
begin
while not Terminated do begin
//Here you do a chunk of your work.
//It's important to have chunks small enough so that "while not Terminated"
//gets checked often enough.
end;
//Here you finalize everything before thread terminates
end;
Con esto, se puede llamar
MyThread.Terminate;
y va a terminar tan pronto como se termina de procesar otro pedazo de trabajo. A esto se le llama "finalización elegante del hilo" porque el hilo en sí tiene la oportunidad de terminar cualquier trabajo y prepararse para la finalización.
hay otro método, llamado 'terminación forzosa'. Puede llamar a:
TerminateThread(MyThread.Handle);
Al hacer esto, Windows detiene con fuerza cualquier actividad en el hilo. Esto no requiere la verificación de "Terminado" en la secuencia, pero potencialmente puede ser extremadamente peligroso, porque estás matando el hilo en el medio de la operación. Su aplicación puede bloquearse después de eso.
Es por eso que nunca usa TerminateThread hasta que esté absolutamente seguro de que tiene todas las posibles consecuencias descubierto. Actualmente no lo haces, así que usa el primer método.
Gracias Timo. Respuesta clara y ejemplos. – Dylan
Y gracias a ti mismo. un muy buen ejemplo. – Dylan
No solo se puede bloquear la aplicación, sino que los recursos utilizados por thead no se desasignarán. TerminateThread() es una llamada de "ratio extrema". –