Текущий архив: 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.45 MB
Время: 0.041 c