Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > описание OnTerninate в потоке


Автор: DmitryHT 18.10.2007, 00:28
в данном примере (http://forum.vingrad.ru/forum/topic-163841.html) исп. след код для события OnTerminate
Код

procedure TForm1.EventMyThreadOnTerminate (Sender :tObject);
begin

  // На всякий случай, убедимся что экземпляр объекта еще существует
  if  not Assigned(MyThread) then Exit; // если его нет, то и делать нечего

  // Еще раз замечу - не уничтожим объект, а только затрем ссылку. Объект
  // уничтожится сам!
  MyThread := Nil;
end;



Можно ли описывать OnTerminate в самом потоке, например, так:
Код

procedure tPotok.execute;
begin
  potok[TT].OnTerminate:= ThreadDone;
  GetIt:=TIdHttp.create(nil);
...
...


и само событие
Код

procedure tPotok.ThreadDone(Sender: TObject);
begin
  if not Assigned(potok[TT])
  then Exit;
  potok[TT]:= nil;
end;



Либо если нельзя, то как передать в procedure TForm1.EventMyThreadOnTerminate (Sender :tObject);
объект, нужно затереть если он описан в виде массива потоков, т.е. potok[i].OnTerminate


Спасибо!  smile 

Автор: aktuba 18.10.2007, 00:36
Цитата

Можно ли описывать OnTerminate в самом потоке


Нет.

Цитата

как передать в procedure TForm1.EventMyThreadOnTerminate (Sender :tObject);
объект, нужно затереть если он описан в виде массива потоков, т.е. potok[i].OnTerminate


Заведи в потоке паблик свойство, в котором храни индекс текущего потока, а в OnTerminate сделай примерно следующее:
Код

procedure TForm1.EventMyThreadOnTerminate (Sender :tObject);
begin
  if  not Assigned(MyThreads[TMyThread(Sender).Index]) then Exit; 
  MyThreads[TMyThread(Sender).Index] := Nil;
end;


P.S.: не надо использовать цветной текст в посте - только мешает, имхо...

Автор: DmitryHT 18.10.2007, 00:50
спасибо, так отлично работает!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)