Главная страница
    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.45 MB
Время: 0.041 c
2-1170530294
Lx4
2007-02-03 22:18
2007.02.25
Как добавить рисунок в системный pop-up?


2-1170485562
vegarulez
2007-02-03 09:52
2007.02.25
Как отловить нажатие кнопки?


2-1170787160
z[T]x
2007-02-06 21:39
2007.02.25
Ehlib_3.6


2-1170579085
Litestone
2007-02-04 11:51
2007.02.25
Свойства файла


1-1168109275
Kolan
2007-01-06 21:47
2007.02.25
Как добраться до пункта меню если у него есть TAction





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский