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