Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.02;
Скачать: CL | DM;

Вниз

Terminate Thread   Найти похожие ветки 

 
rio   (2003-11-25 16:37) [0]

Уважаемые мастера, подскажите, пожалуйста, каким образом можно из приложения выполнить метод Terminate для порожденных им нитей, имея только их Handle"s и ThreadID"s?
Сообщение с помощью PostThreadMessage(MyThreadID,WM_USER+4,0,0) благополучно отправляются, но отловить и обработать его внутри Thread"a как-то не получается:


//внутренность нити
...
type
T_SimpleThread = class(TThread)
private
{ Private declarations }
procedure WMClose(var mes: TMessage); message WM_USER+4;
...

procedure T_SimpleThread.WMClose(var mes: TMessage);
begin
Terminate;
end;
...

procedure T_SimpleThread.Execute;
begin
while(not Terminated)do begin
...
Sleep(1000);
end;
end;

Что здесь не так? Может быть существует другой способ за-terminat"ить нитку?
Заранее спасибо!


 
Digitman ©   (2003-11-25 16:40) [1]


> Что здесь не так?

в теле процедуры Execute нет цикла выборки/диспетчеризации/обработки сообщений, посланных тобой треду ... вот он и не реагирует никак на PostThreadMessage()


 
rio   (2003-11-25 16:58) [2]

я пытался делать и это:

procedure T_SimpleThread.Execute;
var Msg: TMsg;
begin
...
while(GetMessage(Msg,0,0,0))do begin
Dispatch(Msg.Message);
...
Sleep(1000);
end;
..
end;

но не получается - в начале цикла виснет.


 
clickmaker ©   (2003-11-25 17:02) [3]

DispatchMessage не нужен


 
Digitman ©   (2003-11-25 17:04) [4]

1) PostThreadMessage(MySimpleThreadInstance.ThreadID,WM_USER+4,0,0)

2) sleep() зачем ? убери, не нужен вообще он тут


 
Digitman ©   (2003-11-25 17:06) [5]


> clickmaker


у него не DispatchMessage(), а Dispatch()

разные вещи совершенно

нужен ! концептуально это правильный и наиудобнейший подход с использованием Dispatch()


 
Digitman ©   (2003-11-25 17:13) [6]


> rio


в принципе нет нужды резервировать индивидуальный код сообщения для этой цели и при таком подходе

достаточно выполнить

PostThreadMessage(MySimpleThreadInstance.ThreadID,WM_QUIT,0,0)

чтобы "висевший" вызов ф-ции GetMessage() "проснулся" и вернул тебе False (вместо True при ЛЮБОМ ДРУГОМ коде сообщения), и упомянутый цикл завершится


 
rio   (2003-11-25 17:43) [7]

Хорошо, спасибо!
Буду пробовать.



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

Текущий архив: 2004.02.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
14-2364
BlackTiger
2004-01-10 11:58
2004.02.02
Я ПЛАКАЛЪ!!! Microsoft, однако.


3-2020
Term
2004-01-06 15:43
2004.02.02
Посоветуйте компонент который бы 100% подерживал бы клиперовские


3-2017
Ермек
2004-01-06 17:57
2004.02.02
помогите с генератором


14-2323
Думкин
2004-01-11 05:50
2004.02.02
С днем рождения! 11 января.


1-2113
F...
2004-01-22 05:13
2004.02.02
Как запустить зарегистрированную почтовую программу?