Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.20;
Скачать: CL | DM;

Вниз

TThread   Найти похожие ветки 

 
TGrey   (2004-06-03 23:52) [0]

Доброго времени суток!
Использую в приложении класс TThread, вызываю конструктор с параметром True, затем вызваю метод Resume, выполняется метод execute и поток завершается. Как запустить поток заново?


 
Palladin ©   (2004-06-04 02:32) [1]

Во первых FreeOnTerminate:=False и Resume.


 
Digitman ©   (2004-06-04 08:12) [2]


> Как запустить поток заново?


все по-новой : "..вызываю конструктор с параметром True, затем вызваю метод Resume, выполняется метод execute и поток завершается"


 
ZHK ©   (2004-06-04 08:24) [3]

Можно еще в методе Execute сделать вечный цикл с проверкой в начале какой-то переменной. Где-то так:


TMyThread=class(TThread);
ToGo:boolean;
...
constructor Create;
...
procedure Execute; override;
...
function GoAgain:Boolean;
end;

constructor TMyThread.Create;
begin

 // инициализация
 ToGo:=False;
end;

procedure TMyThread.Execute;
begin
 while True do
   begin
     while not (ToGo and Terminate) do;
     if Terminate then Exit;
       

    // выполняю все, что мне нравится
     ToGo:=False;
  end;
end;

procedure TMyThread.GoAgain:Boolean;
begin
 Result:=not ToGo;
 ToGo:=True;
end;


Попробуй так. А вдруг понравится? У меня работает.


 
ZHK ©   (2004-06-04 08:27) [4]

Хотя стой, ошибся, писал второпях:

> while not (ToGo or Terminate) do;


 
evvcom ©   (2004-06-04 10:04) [5]


> ZHK ©

Terminate - это метод, который реализован так:

procedure TThread.Terminate;
begin
 FTerminated := True;
end;

В Вашем примере много путанного и лишнего. Если уж делать "бесконечный" цикл, то все же так:

while not Terminated do begin
...
end;

Внутри этого цикла, когда данные заканчиваются, поток надо усыплять Suspend. А из других потоков, подкинув следующую порцию данных и решив, что этот поток должен продолжить работу, его разбудить Resume.

А Terminate вызывать тогда, когда поток больше не нужен вовсе (из любого потока).



Страницы: 1 вся ветка

Текущий архив: 2004.06.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.049 c
1-1086612922
афвуд
2004-06-07 16:55
2004.06.20
А никто не пробовал писать свой "Variant" ?


3-1085592056
V l a d i m i r
2004-05-26 21:20
2004.06.20
Иерархическая БД и TreeView


9-1076512777
VolanD2002
2004-02-11 18:19
2004.06.20
DelphiX or Direct


14-1086268337
Григорьев Антон
2004-06-03 17:12
2004.06.20
Кто-нибудь сталкивался с вирусом cache277?


1-1086328015
ghg
2004-06-04 09:46
2004.06.20
экспорт double в dll на фортране