Postmessage和消息循环在不同的线程中

postmessage and message loop in different thread

本文关键字:线程 消息 循环 Postmessage      更新时间:2023-10-16

我正在阅读其他人的代码,他们的代码正在工作。我只是对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 PostMessage的HWND设置为null

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

这让我很困惑。似乎主线程创建的线程实际上收到了msg?有人能解释一下吗?

顺便说一句,我是mfc的新手,这是我在这里的第一个帖子,如果我误解了什么,让我知道

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