Вниз
Скачать: CL | DM;

мой компонент и поток в нем   Найти похожие ветки 

 
alex134   (2003-10-30 15:24) [0]

Есть компонент, в нем поток. Пишу для компонента событие окончания работы потока. Как его теперь сгенерировать из потоковой процедуры?


 
panov ©   (2003-10-30 15:45) [1]

1. В конструктор потока передавать адрес CallBack функции, например, и вызывать эуту функцию там, где это требуется.
2. Windows-сообщениями.


 
Владислав ©   (2003-10-30 15:56) [2]

Либо TThread.OnTerminate


 
Digitman ©   (2003-10-30 15:58) [3]

TMyComponent = class;

TMyThread = class(...)
private
...
FMyCreator: TMyComponent;
...
public
constructor Create(..., Creator: TMyComponent);
end;

TMyComponent = class(..)
private
...
FMyThread: TMyThread;
FOnMyEvent: TMyEventProc;
...
end;

procedure TMyComponent.CreateMyThread;
begin
FMyThread := TMyThread.Create(..., Self);
end;

constructor TMyThread.Create(..., Creator: TMyComponent);
begin
...
FMyCreator := Creator;
...
end;

procedure TMyThread.Execute;
begin
...
if Assigned(FMyCreator) then
if Assigned(FMyCreator.FOnMyEvent) then
FOnMyEvent(...);
...
end;


 
Владислав ©   (2003-10-30 16:14) [4]

> Digitman © (30.10.03 15:58) [3]

Оно хорошо до тех пор, пока отсутствует вероятность уничтожения компонента еще до завершения потоковой процедуры.


 
Digitman ©   (2003-10-30 16:33) [5]


> пока отсутствует вероятность уничтожения компонента еще
> до завершения потоковой процедуры.


компонент твой ? твой, думаю) ...
так что ж что мешает перекрыть его диструктор и в теле переопределенного диструктора скомандовать созданному потоку "закруглиться" и дождаться штатного завершения потока, после чего тут же (при необходимости) выполнить поточный_объект.Free ??

и это не единственное решение ! корректных и изящных решений - уйма !


 
Владислав ©   (2003-10-30 16:54) [6]

> Digitman © (30.10.03 16:33) [5]

"компонент твой"

Не, не мой :)

В остальном полностью согласен.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.02 c
4-42256
Немного не по теме
2003-09-17 23:49
2003.11.13
Немного не по теме


11-41128
vdas2
2003-02-16 03:29
2003.11.13
размер в памяти (после запуска)


1-41557
lipskiy
2003-10-24 00:15
2003.11.13
Как вызвать стандартный диалог выбора папки?


6-41848
aldapooh
2003-09-12 10:45
2003.11.13
Сокет


1-41416
Vadim S
2003-10-29 16:15
2003.11.13
Invalid pointer operation




   Наверх