ReadMsgQueue返回值

时间:2015-11-24 17:24:35

标签: c++ winapi while-loop queue

我正在使用MsgQueue将结构从一个进程发送到另一个进程。要读取消息队列,我使用while循环检查ReadMsgQueue()的返回值。根据{{​​3}},ReadMsgQueue() 返回 TRUE 表示成功, FALSE 表示失败。关于这些信息,我写了以下循环:

while(MsgQueueCommunicator::getInstance()->b_MsgQueueCommunicator_Read_MessageQueue(m_hMsgQAlarmState,alarm_params))
{
    RETAILMSG(1,(_T("Update_ActiveAlarmList->alarm_params.i32_Alarm_Output: %d"), alarm_params.i32_Alarm_Output));
    RETAILMSG(1,(_T("Update_ActiveAlarmList->alarm_params.i32AlarmType: %d"), alarm_params.i32AlarmType));
    if(alarm_params.b_IsEnable == true)
    {
        RETAILMSG(1,(_T("Update_ActiveAlarmList->alarm_params = true")));
    }
    else
    {
        RETAILMSG(1,(_T("Update_ActiveAlarmList->alarm_params = false")));
    }

}
RETAILMSG(1,(_T("END OF MSGQUEUE WHILE LOOP")));

所以我只是阅读结构并使用RETAILMSG()检查值。我看到的是,我永远不会离开while循环,即使我已经停止写入队列。我通过在循环之后添加一个retailmsg来检查这个,我从未看到它被打印出来,同时,我在while循环中的零售消息也停止了,表明队列中没有其他内容可读。

一旦队列清空后,while循环是否应该退出,或者我是否误解了ReadMsgQueue()的返回值?

修改 以下是b_MsgQueueCommunicator_Read_MessageQueue()的声明:

BOOL MsgQueueCommunicator::b_MsgQueueCommunicator_Read_MessageQueue(HANDLE hq,AlarmParams& Byte_Flag)
{
    uint32_t dwBytesRead;
    uint32_t dwFlags;
    return ReadMsgQueue(hq,(LPVOID)&Byte_Flag, sizeof(AlarmParams), &dwBytesRead,INFINITE,&dwFlags);
}

0 个答案:

没有答案