C++ 不同线程中的postmessage和message循环

C++ 不同线程中的postmessage和message循环,c++,mfc,postmessage,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和他们使用的消息循环感到有点困惑

#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 当PostMessage的_In_opt_hwndhwnd设置为null时

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

这让我很困惑。看起来由主线程创建的t线程实际上收到了消息?有人能解释一下吗


顺便说一句,我是mfc的新手,这是我在这里的第一篇帖子,如果我误解了什么,请告诉我您似乎在调用CWnd::PostMessage函数,而不是API PostMessage函数。因此,调用使用其HWND成员将消息发布到myClass对话框,消息将在发出调用的同一线程中接收。

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

您是否为createThread和postmessage发布了不正确的大小写?这些不是MFC或API函数,如果它们如您所示大写。@ScottMcP MVP哦,是的,我在那里输入了一些错误。它们应该是PostMessage和createThread您是否为createThread和PostMessage发布了不正确的大写字母?这些不是MFC或API函数,如果它们如您所示大写。@ScottMcP MVP哦,是的,我在那里输入了一些错误。它们应该是PostMessage和createThread您是否为createThread和PostMessage发布了不正确的大写字母?这些不是MFC或API函数,如果它们如您所示大写。@ScottMcP MVP哦,是的,我在那里输入了一些错误。它们应该是PostMessage和createthread,所以您的意思是运行funcB的线程将不会收到该消息?正确。操作系统将消息发布到创建HWND的线程。因此,您的意思是运行funcB的线程将不会收到该消息?正确。操作系统将消息发布到创建HWND的线程。因此,您的意思是运行funcB的线程将不会收到该消息?正确。操作系统将消息发布到创建HWND的线程。