为什么我用MsgWaitForMultipleObjects的时候经常调不出这个循环?
以下是代码:
while (TRUE)
{
DWORD Result=0;
MSG Msg;
memset(&Msg,0,sizeof(MSG)); Result=MsgWaitForMultipleObjects(1,&pClientMsg->hRecv,FALSE,INFINITE,QS_ALLINPUT); if(Result==WAIT_OBJECT_0)
{
stSource=pClientMsg->stAppent;
*pBody=pClientMsg->pBody;
pClientMsg->pBody=NULL;
m_MsgList.RemoveAt(pos);
delete pClientMsg;
return TRUE;
}
else if(Result==WAIT_TIMEOUT)
{
m_MsgList.RemoveAt(pos);
delete pClientMsg;
return FALSE;
}
else if(Result==WAIT_OBJECT_0+1)
{
//Sleep(1000);
//PeekMessage(&Msg,m_hWnd,0,0,PM_NOREMOVE);
//DispatchMessage(&Msg);
while (PeekMessage(&Msg,m_hWnd,0,0,PM_REMOVE))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
}
else
{
AfxMessageBox("1111");
}
}
以下是代码:
while (TRUE)
{
DWORD Result=0;
MSG Msg;
memset(&Msg,0,sizeof(MSG)); Result=MsgWaitForMultipleObjects(1,&pClientMsg->hRecv,FALSE,INFINITE,QS_ALLINPUT); if(Result==WAIT_OBJECT_0)
{
stSource=pClientMsg->stAppent;
*pBody=pClientMsg->pBody;
pClientMsg->pBody=NULL;
m_MsgList.RemoveAt(pos);
delete pClientMsg;
return TRUE;
}
else if(Result==WAIT_TIMEOUT)
{
m_MsgList.RemoveAt(pos);
delete pClientMsg;
return FALSE;
}
else if(Result==WAIT_OBJECT_0+1)
{
//Sleep(1000);
//PeekMessage(&Msg,m_hWnd,0,0,PM_NOREMOVE);
//DispatchMessage(&Msg);
while (PeekMessage(&Msg,m_hWnd,0,0,PM_REMOVE))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
}
else
{
AfxMessageBox("1111");
}
}
解决方案 »
- 关于广播消息 如何屏蔽发送方接收到自己的广播消息....
- 有点急.请问一下如何在treectrl上显示png图标?默认的只能bmp?
- CTreeCtrl HTREEITEM lParam值怎么进去不了呀??奇怪的是用变量进不了值,直接用"11"这种形式却有值
- 如何读注册表项的默认键值
- 请问timeSetEvent函数的定义---急,在线!!
- 问一个很好菜的问题|~~~在线
- Crecordset delete()的错误,急急急!!请各位高手帮帮
- 有办法编程实现麦克风(microphone)的语音输入直接输出到喇叭(speaker)吗?
- 请教关于ATL做ComDLL时传递二维数组的问题(一维传递没问题用VARIANT+SafeArray)
- 求助各位高手:ClistCtrl拖动问题
- 判断 CListCtrl::GetItemState 的 LVIS_SELECTED 怎么老是不成功
- 我如果把所有创建的类都以Object为基类,和以其他的为基类有什么区别吗?
你确定只接收m_hWnd消息?一般设为NULL接收线程关联窗口的所有消息
PeekMessage(&Msg,NULL,0,0,PM_REMOVE)