2015-06-10 2 views
1

Я читаю код других людей, и их код работает. Я просто чувствую себя немного смутить о PostMessage и цикл обработки сообщений, они использовалиpostmessage и цикл сообщений в другой теме

#define MESSAGE XXX //some number 
BEGIN_MESSAGE_MAP(myClass, CDialog) 
//... 
ON_THREAD_MESSAGE(...) 
END_MESSAGE_MAP() 
... myClass::funcA(...) 
{ 
    static HANDLE t = createThread(...., funcB,....) 
    ..... 
    postmessage(MESSAGE) 

} 

... myClass::funcB(...) 
{ 
    .... 
    while(...) 
    { 
     TranslateMessage(&msg); 
     dispatchMessage(&msg); 
    } 

} 

код выглядит так, но с небольшой модификацией

Согласно MSDN когда _In_opt_ HWND HWND из PostMessage установлено нулевое значение

Функция ведет себя как вызов PostThreadMessage с параметром dwThreadId, установленным для идентификатора текущего потока.

это сбивает с толку. Кажется, поток t, созданный основным потоком, фактически получает сообщение msg? может кто-нибудь объяснить это?

Кстати, я новичок в MFC, и это мой первый пост здесь, если я неправильно что-нибудь, дайте мне знать,

+0

Вы отправили неправильную заглавную запись для createThread и postmessage? Это не функции MFC или API, если они капитализируются по мере того, как вы показываете. –

+0

@ ScottMcP-MVP, о, да, я сделал некоторые опечатки там. они должны быть PostMessage и CreateThread – HLi

ответ

0

Вы, кажется, вызов функции CWnd :: PostMessage, а не функции API PostMessage. Таким образом, вызов отправляет сообщение в диалог myClass, используя его член HWND, и сообщение будет получено в том же потоке, который вызывает вызов.

+0

Значит, вы имеете в виду, что поток, который запускает funcB, не получит это сообщение? – HLi

+0

Исправить. Операционная система отправляет сообщение в поток, который создал HWND. –