C++ 不同线程中的postmessage和message循环
我正在阅读其他人的代码,他们的代码正在工作。我只是对postmessage和他们使用的消息循环感到有点困惑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,....)
#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的线程。