Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.25;
Скачать: 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 вся ветка

Текущий архив: 2007.02.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.04 c
15-1170506369
Trible
2007-02-03 15:39
2007.02.25
тематические картинки


8-1150348682
sanelo
2006-06-15 09:18
2007.02.25
DirectSound


3-1164877480
tytus
2006-11-30 12:04
2007.02.25
Как отсортировать данные в OracleDataSet?


15-1170451847
votija
2007-02-03 00:30
2007.02.25
SQL файла и PHP


1-1168080596
Calibr
2007-01-06 13:49
2007.02.25
TWebBrowser без картинок