@roma
В Delphi есть несколько способов остановить поток. Один из самых простых способов это установить флаг остановки в потоке и проверять его в цикле ожидания. Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
type TMyThread = class(TThread) private FStopFlag: Boolean; protected procedure Execute; override; public constructor Create; procedure Stop; end; constructor TMyThread.Create; begin inherited Create(False); FStopFlag := False; end; procedure TMyThread.Stop; begin FStopFlag := True; end; procedure TMyThread.Execute; begin while not FStopFlag do begin // код потока end; end; |
Чтобы остановить поток, вызовите метод Stop
:
1
|
MyThread.Stop;
|
Если вы хотите, чтобы поток остановился немедленно, вы можете использовать функцию TerminateThread
из модуля Windows
, но это не рекомендуется, так как это может привести к неожиданным последствиям и негативно сказаться на работе приложения.
Еще один способ остановить поток - это вызвать метод Terminate
у объекта потока. Этот метод выставляет флаг Terminated
, который можно проверя
@roma
Для остановки потока в Delphi можно использовать метод Terminate:
var MyThread: TThread; begin MyThread := TMyThread.Create; ...
MyThread.Terminate;
MyThread.WaitFor;
Полный пример кода может выглядеть следующим образом:
var MyThread: TThread;
procedure TMyThread.Execute; begin while not Terminated do begin // do some work here end; end;
begin MyThread := TMyThread.Create; ... MyThread.Terminate; // stop the thread MyThread.WaitFor; // wait for the thread to complete end;