Вы никогда не должны вызывать приостановку в потоке, это небезопасно, и возобновление следует использовать только для запуска потока, который был создан приостановленным.
В Delphi 2010 функции приостановки и возобновления были упразднены, а метод start был введен для усиления этого.
Более полное объяснение см. в этой теме на форумах Codegears.
сказав, что есть 2 способа прекратить и освободить поток.
1: я устанавливаю FreeOnTerminate при создании потока, поэтому я просто звоню.
Thread.Terminate;
2: явно освободить поток, так как мне нужно прочитать результат из общедоступного свойства до освобождения потока и после его завершения.
Thread.Terminate;
Thread.WaitFor;
//Do somthing like read a public property from thread object
if Thread <> nil then FreeAndNil(Thread);
В основном цикле выполнения может быть хорошей идеей добавить некоторую обработку исключений. Или вам может быть интересно, почему поток завершает сам себя. Это может быть причиной AV, если для потока установлено значение FreeOnTerminate, и он уже был освобожден, когда вы пытаетесь его освободить.
procedure TThread.Execute;
begin
while not Terminated do
begin
try
//do something
except
on E:Exception do
//handle the exception
end;
end;
end;
person
Mike Taylor
schedule
26.09.2010