![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
THREADS !!! [D5, Win95/98]
Evgeniy_S © (2001-11-28 16:13:00)блин, я уже запарился :(( помогите плиз разобраться с такой фигней (можно сказать чисто спортивный интерес, самое интересное, что в одной проге это работает, а при попытке повторения этого дела в других прогах отказывается! )
есть такое описание :
const
wm_stop_thread = wm_user + 2;
type
Thread = class (TThread)
protected
procedure execute;override;
procedure stop (var Msg : TMessage); message wm_stop_thread;
procedure UpdateCaption;
end;
procedure THread.execute;
begin
//делаем что то долго, циклов тут нет...
end;
procedure THread.stop(var Msg: TMessage);
begin
case Msg.WParam of
0 : Suspend;
1 : Resume;
2 : Terminate;
end;
end;
//создаем тред
procedure TForm1.Button1Click(Sender: TObject);
begin
with Thread.Create(true) do
begin
Form1._Handle := Handle;
resume;
end;
end;
//посылаем ему команду, чтоб он умер, но нифига не получется,
//хотя, повторюсь в уже написанной проге так работает!
procedure TForm1.Button2Click(Sender: TObject);
begin
PostMessage(_Handle, wm_stop_thread, 2, 0);
//SendMessage и PostThreadMessage дают тот же результат
end;
troits (2001-11-28 16:41:00) [21]Посмотри на реализацию terminate. Там просто выставляется флаг.
Ты уж сам должен выходить из Execute, если этот флаг выставлен.