MsgWaitForMultipleObjects函数未进入WAIT_TIMEOUT情况

时间:2014-09-16 13:22:50

标签: visual-c++ serial-port

我们正在使用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条件就足够了吗?

请告诉我们处理此问题的正确方法。

0 个答案:

没有答案