![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование OnTerminate в TThread [D7, XP]
Destroyer © (2007-02-02 15:59:00)Нужно отловить событие 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?
Destroyer (2007-02-03 01:33:00) [1]
> А зачем выделенное жирным ?
Да, точно это и мешало, просмотрел :) Спасибо
Kolan (2007-02-02 16:13:00) [2]С потоком:
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;
Kolan (2007-02-02 16:10:00) [3]> Поток вызывается
Что знчит вызывается? Создается чтоли?
По вопросу: Разберись с событиями. Имхо бред какой-то.
Пример:
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:00) [4]
> TimerThread.OnTerminate := OnThreadTerminate;
А зачем выделенное жирным?
clickmaker (2007-02-02 16:05:00) [5]
> Destroyer © (02.02.07 15:59)
а зачем обработчик события в самом источнике события? Разве в методе Execute не проще увидеть завершение?