Главная страница
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.044 c
9-1144843652
NightLord
2006-04-12 16:07
2007.02.25
Формулы


2-1170742872
Нож
2007-02-06 09:21
2007.02.25
Interbase тормозит... почему?


3-1165228520
O.O
2006-12-04 13:35
2007.02.25
Узнать значение


11-1149274717
GMax
2006-06-02 22:58
2007.02.25
Картинки в ListView. не только в первой колонке


2-1170491745
Garacio
2007-02-03 11:35
2007.02.25
проверить пустой каталог, или нет