Главная страница
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.058 c
1-1086416398
FragMan
2004-06-05 10:19
2004.06.20
Руссификация dll


6-1082971824
Dmitriy_R
2004-04-26 13:30
2004.06.20
Помогите с сокетом разобраться


3-1085599919
DIS
2004-05-26 23:31
2004.06.20
сортировка в столбце DbGrid


1-1086706164
Владимир
2004-06-08 18:49
2004.06.20
Проблема с Imagelist


14-1086092997
Vit@ly
2004-06-01 16:29
2004.06.20
Задака - подкинул на mcsa в курилку, до сих пор решают