Non si dovrebbe mai chiamare sospendere su un TThread la sua non è sicuro di farlo e curriculum dovrebbe essere utilizzato solo per avviare un thread che è stato creato sospeso.
In Delphi 2010, la sospensione e riprendere da dove ammortizzati e che il metodo start è stato introdotto per rafforzare questa.
Per una spiegazione più completa vedono questo thread al forum Codegears.
aver detto che ci sono 2 modi che verrà interrotta e liberare un TThread.
1: Mi è FreeOnTerminate quando viene creato il filo in modo mi basta chiamare.
Thread.Terminate;
2: liberare il filo in modo esplicito, come ho bisogno di leggere il risultato da una proprietà pubblica prima che il thread viene liberato e dopo che è terminato.
Thread.Terminate;
Thread.WaitFor;
//Do somthing like read a public property from thread object
if Thread <> nil then FreeAndNil(Thread);
Nella principale eseguire ciclo può essere una buona idea di mettere un po 'la gestione delle eccezioni in. Oppure si può essere lasciato chiedendo perché il filo sembra porre fine alla sua auto. Ciò potrebbe causare l'AV se il thread è impostato su FreeOnTerminate ed è già stato liberato quando si tenta di liberarlo.
procedure TThread.Execute;
begin
while not Terminated do
begin
try
//do something
except
on E:Exception do
//handle the exception
end;
end;
end;
possibile duplicato di [Libera un TThread modo automatico o manuale] (http://stackoverflow.com/questions/3557105/free-a-tthread-either-automatically-or-manually) –
Non sospendere il filo. Il metodo terminate imposta semplicemente la proprietà Terminated su true e il metodo Execute è responsabile della chiusura del thread. Se è sospeso, non avrà la possibilità di terminare. – jachguate
Un altro problema con il codice sopra, è che probabilmente libera la discussione prima che abbia una modifica per terminare il modo normale. –