Вниз
Скачать: CL | DM;

Использование OnTerminate в TThread   Найти похожие ветки 

 
Destroyer ©   (2007-02-02 15:59) [0]

Нужно отловить событие OnTerminate при когда поток заканчивает работу и выполнить на него нужные действия.
Поток вызывается из главного юнита (Unit1) много раз (не одновременно), в разных местах, с разными параметрами:
Timer.Create(параметры);

В юните потока (unit2):
...
type
 TimerThread = class(TThread)

private
 { Private declarations }
 ...
 procedure OnThreadTerminate (Sender : TObject);
protected
   procedure Execute; override; // для приема своих параметров

 public
 constructor Create(FPath: String; Fflag: boolean; RProcType:string; FExt:string);

 end;

procedure TimerThread.OnThreadTerminate (Sender : TObject);
begin
// действия
end;

constructor TimerThread.Create(FPath: String; Fflag: boolean; RProcType:string;FExt:string);
begin    
 inherited Create(True);    // Поток создаем в состоянии «Приостановлен»
 TimerThread.OnTerminate := OnThreadTerminate;
 ...
 resume;
end;


В выделенной строке при компиляции ошибка - Method identifier expected
Как правильно "поймать" OnTerminate?


 
clickmaker ©   (2007-02-02 16:05) [1]


> Destroyer ©   (02.02.07 15:59)

а зачем обработчик события в самом источнике события? Разве в методе Execute не проще увидеть завершение?


 
Kolan ©   (2007-02-02 16:10) [2]

> Поток вызывается

Что знчит вызывается? Создается чтоли?

По вопросу: Разберись с событиями. Имхо бред какой-то.

Пример:
TClassA = class
strict private
 FEvent: TNotifyEvent;
public
 property OnEvent: TNotifyEvent read FEvent write FEvent;
end;

TClassB = class
strict private
 FAObject: TClassA;
strict protected
 procedure Event(Sender: TObject);
public
 constructor Create;
end;

constructor TClassB.Create;
begin
 FAObject := TClassA.Create;
 FAObject.OnEvent := Event;
end;


procedure TClassB.Event(Sender: TObject);
begin
 Событие случилось...
end;

Понятно?


 
Сергей М. ©   (2007-02-02 16:10) [3]


> TimerThread.OnTerminate := OnThreadTerminate;


А зачем выделенное жирным ?


 
Kolan ©   (2007-02-02 16:13) [4]

С потоком:



TClassB = class
strict private
FAObject: TThread;
strict protected
procedure Event(Sender: TObject);
public
constructor Create;
end;

constructor TClassB.Create;
begin
FAObject := TThread.Create(False);
FAObject.OnTerminate := Event;
end;

procedure TClassB.Event(Sender: TObject);
begin
Событие уничтожения случилось...
end;


 
Destroyer ©   (2007-02-03 01:33) [5]


> А зачем выделенное жирным ?

Да, точно это и мешало, просмотрел :) Спасибо



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.027 c
2-1170491745
Garacio
2007-02-03 11:35
2007.02.25
проверить пустой каталог, или нет


4-1161082022
Elen
2006-10-17 14:47
2007.02.25
Вопрос по EnumChildWindows


15-1170606291
Calibr
2007-02-04 19:24
2007.02.25
JavaScript


2-1170611712
Defort
2007-02-04 20:55
2007.02.25
Проблема с Post


15-1170412945
boriskb
2007-02-02 13:42
2007.02.25
Просто бизнес. Ничего личного.




   Наверх