S
Shouldercannon
Реализация
В Execute потока есть вызов Terminate; благодаря чему проверка проходит нормально (Поток "MyThread" не работает), но делать так не советуют. Как правильно реализовать задуманное?
Код:
procedure TFormMain.BStartClick(Sender: TObject);
begin
MyThread := TMyThread.Create(True); // После создания поток остановлен
MyThread.FreeOnTerminate := True; // После завершения работы поток "умрёт" сам
MyThread.Start; // Запуск потока
end;
procedure TMyThread.Execute;
var
I2: Integer;
begin
for I2 := 0 to 60 do
begin
if I2 > 61 then Break;
Sleep(100);
I := I2;
Synchronize(SyncProc);
end;
Terminate; // Не советуют так делать
end;
procedure TMyThread.SyncProc;
begin
FormMain.Caption := IntToStr(I);
end;
procedure TFormMain.BCheckClick(Sender: TObject);
begin
// Проверка на существование потока
if MyThread <> nil then
begin
// Если поток умирает "мирно", штатно завершив работу
if MyThread.Terminated then ShowMessage('Поток "MyThread" не работает') else ShowMessage('Поток "MyThread" работает');
end else ShowMessage('Поток "MyThread" не создан');
end;