Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
Внизмой компонент и поток в нем Найти похожие ветки
← →
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 вся ветка
Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.029 c