Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.02.25;
Скачать: [xml.tar.bz2];

Вниз

Использование 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.046 c
15-1170388196
Slider007
2007-02-02 06:49
2007.02.25
С днем рождения ! 2 февраля


2-1170789587
MSTeam
2007-02-06 22:19
2007.02.25
1 экземпляр


1-1167851251
lookin
2007-01-03 22:07
2007.02.25
Путь к исполняемому файлу


1-1167329992
Temnovit
2006-12-28 21:19
2007.02.25
Как сохранить объект в файл?


2-1170781439
Novichok_new
2007-02-06 20:03
2007.02.25
получить часть строки





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский