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

Ожидание окончания потока.   Найти похожие ветки 

← →
Manfred ©   (2003-11-11 14:06) [0]

Уважаемые Мастера, подскажите, пожалуйста, как отследить завершение потока?
С уважением, Manfred.


← →
Yakudza ©   (2003-11-11 14:17) [1]

WaitFor


← →
TUser ©   (2003-11-11 14:46) [2]

Подождать завершения - [1], проверить завершен ли - Terminated. Про работу с WiatFor - см здесь
http://delphimaster.net/view/1-1068421119/


← →
Manfred ©   (2003-11-11 15:25) [3]

Мне бы получить уведомление об окончании потока.


← →
TUser ©   (2003-11-11 15:38) [4]

OnTerminate?


← →
Manfred ©   (2003-11-11 15:47) [5]


> TUser
Не работает :-(


← →
panov ©   (2003-11-11 16:08) [6]

Прекрасно работает. Вот пример:

Основная форма:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Forms,
Dialogs;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
public
procedure MyProc(Sender: TObject);
end;

var
Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.MyProc(Sender: TObject);
begin
ShowMessage("End Thread");
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
with Ttest.Create(True) do
begin
OnTerminate := MyProc;
Resume;
end;
end;

end.


Модуль с определением класса-потока:

unit Unit2;

interface

uses
Classes,windows;

type
TTest = class(TThread)
protected
procedure Execute; override;
end;

implementation

procedure TTest.Execute;
begin
Sleep(3000);
end;

end.


← →
Digitman ©   (2003-11-11 17:10) [7]


> Manfred


> Мне бы получить уведомление об окончании потока.


перехватывай ф-цию ExitThread()
иных "уведомлений" нет

обработчик же OnTerminate() выполняется еще в момент работы доп.потока


← →
Manfred ©   (2003-11-11 17:12) [8]

Спасибо, Мастера, заработало :-)


← →
Manfred ©   (2003-11-17 02:31) [9]

А вот ещё решение.
Получаем handle запущенного нами потока и ожидаем его изменения:

var
popa: Cardinal;
MyThread: TThread;
begin
MyThread := TThread.Create(по фигу False или True);
popa := MyThread.Handle;
while (MyThread.Handle = popa) do Application.HandleMessages;
end;

Это принцип, реализация может быть любой.
Кстати, работает безукоризненно.

С уважением, Manfred.


← →
Digitman ©   (2003-11-17 09:06) [10]


> Кстати, работает безукоризненно


не верю.

не знаю как в Д7, но в Д5 класс TThread при завершении потока не изменяет никоим образом поле Handle, и цикл

while (MyThread.Handle = popa) do

будет бесконечным

к тому же, если св-во FreeOnTerminate = True, то риск схлопотать AV на любой из строчек

popa := MyThread.Handle; //здесь
while (MyThread.Handle = popa) do ... //или здесь

очень велик


← →
Семен Сорокин ©   (2003-11-17 09:27) [11]

2Manfred
Как вариант - посылать сообщение окну о завершении потока.



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

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



Память: 0.47 MB
Время: 0.015 c
1-89880
ramzi
2003-11-15 19:40
2003.11.27
TrimRight


1-89946
Anton V Dubovik
2003-11-18 04:37
2003.11.27
StringGrid - подсказки при редактировании


1-89847
Agent[007]
2003-11-16 12:20
2003.11.27
Chr(Ord(...))


3-89773
stud
2003-11-06 17:47
2003.11.27
отчеты........


14-90065
Слэш2
2003-11-06 11:42
2003.11.27
где взять русский consts для Delphi 7 ?




   Наверх