Показать сообщение отдельно
  #1  
Старый 31.01.2016, 11:30
Loca Loca вне форума
Прохожий
 
Регистрация: 28.10.2015
Сообщения: 20
Версия Delphi: delphi 10
Репутация: 518
По умолчанию Уничтожение и повторный запуск потока

Здравствуйте, как можно сделать, что бы при старте потока проверялось, если он существует, то уничтожить его и запустить снова.
Пробовал так:

Сам поток (лежит на модуле формы)
Код:
  type
  thread = class(tthread)
  private
  procedure create;
  procedure load;
  procedure show;
  procedure resiz;
  public
  procedure execute; override;
  end;

Выполнение
Код:
procedure thread.Execute;
begin
load;
synchronize(create);
sleep(50);
synchronize(show);
sleep(50);
if str=true then synchronize(resiz);

pot:=nil;
end;

Запуск
Код:
if pot<>nil then
begin
pot.Terminate;
pot:=nil;
end;

pot:=thread.Create(true);
pot.FreeOnTerminate:=true;
pot.Priority:=tpnormal;
pot.Resume;

И если много раз запустить его, то он не уничтожается. А т.к. поток работает с компонентами на форме, происходит AV.

Даже проверял, убирал все процедуры, кроме одной, в ней писал:
memo....add('поток запущен');
sleep(5000);
memo....add('поток завершён');

Нажимал быстро раз 10 на кнопку, которая запускает поток, и через пять секунд в мемо десять раз написало "поток завершён"

Помогите пожалуйста. Поиск не помог, почти все темы про Terminate, а как на писать условие нигде нет.
Ответить с цитированием