Главная страница
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.02 c
14-1085795578
mfender
2004-05-29 05:52
2004.06.20
Так кто ж они все-таки - хулиганы, или хулиганы-экстремисты?


1-1086651970
bulanov
2004-06-08 03:46
2004.06.20
Sender


1-1086406763
mr.Delphin
2004-06-05 07:39
2004.06.20
Сжать или растянуть


4-1084285416
ArthurKhamitov
2004-05-11 18:23
2004.06.20
CD-ROM


1-1086682330
Sandman25
2004-06-08 12:12
2004.06.20
Goto оптимален?