• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Проверить поток на существование

  • Автор темы Shouldercannon
  • Дата начала
S

Shouldercannon

Реализация
Код:
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;
В Execute потока есть вызов Terminate; благодаря чему проверка проходит нормально (Поток "MyThread" не работает), но делать так не советуют. Как правильно реализовать задуманное?
 
M

-master-

Потому что переменная MyThread нигде не принимает значения nil, следовательно можно нарваться на исключение.
Другими словами проверка if MyThread <> nil then не имеет смысла.

А правильность зависит от того что вы делаете, и для чего вам эта проверка.
Как правило FreeOnTerminate выставляют когда особо не заботятся о то что потом будет с потоком, стартонули и забыли.
 
S

Shouldercannon

Давайте попробуем сделать правильную реализацию на примере в кода выше.
 
Последнее редактирование модератором:
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!