Главная страница
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.024 c
9-1077653558
Support1
2004-02-24 23:12
2004.06.20
Вопрос по DelphiGFX .....


8-1081162594
niko4543
2004-04-05 14:56
2004.06.20
Flash


3-1084788202
evgen
2004-05-17 14:03
2004.06.20
Как экспортировать содержимое DBGrid в Excel


1-1086759000
Иван1
2004-06-09 09:30
2004.06.20
Как избавиться от звука при нажатии Enter в Edt1 ?


14-1086248844
alless
2004-06-03 11:47
2004.06.20
AVERTV