Главная страница
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.47 MB
Время: 0.027 c
1-1086256683
Ruslan
2004-06-03 13:58
2004.06.20
Есть массив байт (Array of Byte) . Как в него поместить число ?


1-1086683960
Snip
2004-06-08 12:39
2004.06.20
Сохранение дерева


1-1086322949
korvin
2004-06-04 08:22
2004.06.20
Вывод отчёта нестандартной ширины


14-1086324658
han_malign
2004-06-04 08:50
2004.06.20
Ядерный пароль на ядерные боеголовки


14-1086155836
NailMan
2004-06-02 09:57
2004.06.20
Нужен хороший монитор сети