AfxPumpMessage()正在使用
AfxPumpMessage() is using for?
本文关键字:AfxPumpMessage 更新时间:2023-10-16
我有一个主线程和子线程。在子线中,我发送到主线程。在主线程中,我称之为:
while( ::WaitForSingleObject(hThread, 0) == WAIT_TIMEOUT )
{
MSG message;
while( ::PeekMessage( &message, NULL , WM_MIN, WM_MAX, PM_NOREMOVE ) )
{
::AfxPumpMessage();
}
}
它可以正常工作!但是我不知道afxpumpmessage()如何工作?如何避免僵局?有人帮我吗?预先感谢。
您的代码运行一个繁忙的循环。当线发信号时,外部while
循环终止。在此之前,循环繁忙并派遣消息。这就是允许主线程在子线程上等待的原因,但也响应子线程发送的消息。
实际上,对PeekMessage
的呼吁是毫无意义的。这是毫无意义的,因为AfxPumpMessage
会做同样的事情,然后泵送所有排队的消息。
正如我所说,您的外循环是一个繁忙的循环。你真的不想要那个。消耗CPU周期没有任何事情可以做任何事情。您应该使用MsgWaitForMultipleObjects
,而不是WaitForSingleObject
。这使您可以在线程上等待,并能够派遣消息。
假设您不想处理排队的消息,并且只想派遣发送消息,则您的循环可能看起来像这样:
while( ::MsgWaitForMultipleObjects(1, &hThread, FALSE, INFINITE,
QS_SENDMESSAGE) == WAIT_OBJECT_0 + 1 )
{
MSG message;
::PeekMessage(&message, 0, 0, 0, PM_NOREMOVE);
}
这不会处理排队的消息。如果您确实需要处理这些操作,那么循环看起来会有所不同。
相关文章: