Вниз
Скачать: 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
1-41548
mabus
2003-10-27 18:52
2003.11.13
Экспорт TToolBar из Dll-ки


1-41456
MaG
2003-11-04 16:06
2003.11.13
....без модуля Forms


3-41021
Vadim S
2003-10-15 17:58
2003.11.13
Ошибка при выполнении запроса MS SQL


3-41064
Denisiy
2003-10-23 18:38
2003.11.13
Как отследить изменение ширины столбца DBgrid a?


4-42225
JS
2003-09-02 16:45
2003.11.13
Global memory




   Наверх