我们正在使用visual c ++编写一个应用程序,该应用程序使用comm端口与设备进行通信,并从中获取响应。
我们正在使用函数MsgWaitForMultipleObjects来等待。该功能如下所示。
unsigned long dwRes;
while( true )
{
dwRes=MsgWaitForMultipleObjects(1, &m_hPPMsgResponseReceived, false, 80, QS_ALLINPUT);
switch(dwRes)
{
case WAIT_OBJECT_0:
// let's return
LogError("WaitOnResponseEvent", EVENT_TYPE_ERROR, 2, "%s","event.");
ResetEvent(m_hPPMsgResponseReceived);
return;
case WAIT_OBJECT_0 + 1:
// process the messages
MSG msg;
// see if there are any messages to process
while( PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) )
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
break;
case WAIT_TIMEOUT:
LogError("WaitOnResponseEvent", EVENT_TYPE_ERROR, 2, "%s", "after wait for timeout.");
ResetEvent(m_hPPMsgResponseReceived);
return;
default:
LogError("WaitOnResponseEvent", EVENT_TYPE_ERROR, 2, "%s", "default case reached");
return;
}
}
在这种情况下,超时值为80毫秒,因为可以在函数中看到。
问题在于,在某些系统中,有时(并非总是),即使时间超过80毫秒,该功能也不会进入WAIT_TIMEOUT情况。因此,MsgWaitForMultipleObjects没有返回。
有人可以告诉我们可能导致这种情况的原因吗?
此外,在上面的代码中,我们在案例WAIT_OBJECT_0 + 1中使用 While循环 消息抽取:
这是消息抽取的正确方法吗?或者使用 if条件就足够了吗?
请告诉我们处理此问题的正确方法。