C++ Windows消息传递
我的问题是关于windows消息传递的。我有两个应用程序,通过WM_COPYDATA消息进行通信。在第一个应用程序中,还有一些应用程序定义的消息。问题是,当处理WM_COPDATA消息时,也会发送应用程序定义的消息,WM_COPYDATA处理停止,处理转到我的消息。当我加上主要的陈述时,我明白了。(实际上,它不会影响程序流。) 让我简单地谈谈程序流程。对于每个WM_COPYDATA消息,都会打开一个窗口,打开后会创建一个线程。此线程休眠4秒钟,然后使用SendMessage()发送MM_MY_消息。因此,在某个点上,WM_COPYDATA和MM_MY_消息对应。我所期望的是,在完成一条消息后,它将继续下一条消息。但情况不同C++ Windows消息传递,c++,windows,winapi,windows-messages,C++,Windows,Winapi,Windows Messages,我的问题是关于windows消息传递的。我有两个应用程序,通过WM_COPYDATA消息进行通信。在第一个应用程序中,还有一些应用程序定义的消息。问题是,当处理WM_COPDATA消息时,也会发送应用程序定义的消息,WM_COPYDATA处理停止,处理转到我的消息。当我加上主要的陈述时,我明白了。(实际上,它不会影响程序流。) 让我简单地谈谈程序流程。对于每个WM_COPYDATA消息,都会打开一个窗口,打开后会创建一个线程。此线程休眠4秒钟,然后使用SendMessage()发送MM_MY_消
case WM_COPYDATA:
std::cout << "WM_COPYDATA started" << std::endl;
//
// do some stuff.
//
std::cout << "WM_COPYDATA finished" << std::endl;
return 0;
case MM_MY_MESSAGE:
std::cout << "--MM_MY_MESSAGE started--" << std::endl;
//
// do some stuff.
//
std::cout << "--MM_MY_MESSAGE finished--" << std::endl;
return 0;
“MM\u MY\u MESSAGE”打印如何介于WM\u COPYDATA打印之间?您观察到的行为称为“重入”。用
do some stuff
表示的代码有助于产生-产生“泵送”消息队列(检索和分派挂起的窗口消息)。这包括但不限于显示模式对话框或上下文菜单;从单线程单元进行单元外COM调用;当然,调用GetMessage
和DispatchMessage
之类的东西,甚至从消息循环中调用SendMessage
都会导致这种情况发生。如果没有看到您省略的代码,没有人能够确切地告诉您是什么导致了它。我已经添加了一些解释。无法显示内部case语句,因为它很长,某些相关代码位于另一个线程内,等等。但是case语句内没有SendMessage()调用。请使用调试器在MM\u MY\u MESSAGE
案例上设置断点,然后按照堆栈跟踪查看可重入性来自何处。作为其实现的一部分,可能会调用SendMessage
,从而打开了重新进入的可能性<代码>发送消息发送入站跨线程发送的消息。
WM_COPYDATA started
WM_COPYDATA finished
WM_COPYDATA started
WM_COPYDATA finished
WM_COPYDATA started
--MM_MY_MESSAGE started--
--MM_MY_MESSAGE finished--
WM_COPYDATA finished