Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > повторный вызов TThread.Resume


Автор: pethead 11.6.2010, 12:06
создаю поток
 fMailThread:=TSimpleThread.Create(True);
 fMailThread.Priority:=tpLower;
 fMailThread.FreeOnTerminate:=False;
 fMailThread.Delay:=1000;
 fMailThread.OnAction:=MailSender;

потом вызываю 
fMailThread.Resume

все работает - отрабатывается код
procedure TSimpleThread.Execute;
begin
  Sleep(Delay);
  Action;
end;

потом хочу еще раз
fMailThread.Resume
и ничего.
хотя fMailThread.Suspended=True

Добавлено через 13 минут и 38 секунд
переделал функционал на создание потока каждый раз когда его надо вызвать 

 Result:=True;

 try
 fMailThread:=TSimpleThread.Create(True);
 fMailThread.Priority:=tpLower;
 fMailThread.FreeOnTerminate:=True;
 fMailThread.Delay:=1000;
 fMailThread.OnAction:=MailSender;
 fMailThread.Resume;
 except
  Result:=False;
 end;

так работает.

Автор: kami 11.6.2010, 12:33
Цитата(pethead @  11.6.2010,  12:06 Найти цитируемый пост)
потом хочу еще разfMailThread.Resume и ничего.

Потому что созданного Windows-потока уже не существует. Он прекратил существование, когда произошел выход из Execute. Остался только экземпляр класса, обслуживавший этот поток ("обертка" над Windows-потоком), т.е. непосредственно fMailThread.
Цитата(pethead @  11.6.2010,  12:06 Найти цитируемый пост)
переделал функционал на создание потока каждый раз когда его надо вызвать 

И это один из вариантов правильного решения.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)