Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.02.02;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.02.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.008 c
14-2327
Uncle_Archi
2004-01-06 21:19
2004.02.02
Задачка


3-1960
alexEagle
2004-01-09 17:51
2004.02.02
TDBGrid.ReadOnly для Lookup ов???


3-1992
Navi
2004-01-07 16:51
2004.02.02
Установка FB


14-2297
}|{yk
2004-01-12 16:33
2004.02.02
Вопросы из харьковского ЧГК. №4


1-2130
PutRsa
2004-01-19 17:06
2004.02.02
чтение двоичных данных из файла и работа с ними





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский