postmessage和消息循环在不同的线程

时间:2015-06-10 03:59:47

标签: c++ mfc 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 of PostMessage设置为null

  

该函数的行为类似于对PostThreadMessage的调用,其中dwThreadId参数设置为当前线程的标识符。

这对我来说很困惑。似乎主线程创建的t线程实际上收到了msg?任何人都能解释一下吗?

顺便说一下,我是mfc的新手,这是我在这里的第一篇文章,如果我误解了什么,请告诉我

1 个答案:

答案 0 :(得分:0)

您似乎正在调用CWnd :: PostMessage函数,而不是API PostMessage函数。因此,调用使用其HWND成员向myClass对话框发布消息,并且消息将在进行调用的同一线程中接收。