在我的线程监视函数(对串口触发事件进行监视)的for循环中,当用串口触发器给出一个触发事件时,为什么监视函数给出两次结果啊,即循环了两次啊? 当监测到触发信号时,我已经用了ResetEvent(ov.hEvent)是触发事件为无信号状态了啊,第二次循环怎么能够进行呢?请高手指点,谢谢:)
for(;;)
{
m_wEventArray[0]=m_wShutdownEvent;
m_wEventArray[1]=ov.hEvent;
if(!WaitCommEvent(m_CommPort,&dwEventMask,&ov))
{
if(ERROR_IO_PENDING==GetLastError())
TRACE("WaitCommEvent:Failed to wait events reason:%d",GetLastError());
else
{
TRACE("WaitCommEvent:Failed to wait events reason:%d",GetLastError());
return E_FAIL;
}
}
else
AfxMessageBox("WaitCommEvent returned not zero!");
ClearCommError(m_CommPort, &dwError, &comstat);
DWORD dwait=WaitForMultipleObjects(2,m_wEventArray,FALSE,INFINITE);
AfxMessageBox("WaitForMultipleObjects has returned!");
switch(dwait)
{ case 1: //WAIT_OBJECT_0+1
{
AfxMessageBox("one of the 2 events occured!");
ResetEvent(ov.hEvent);
//m_wEventArray[1]=ov.hEvent;
break;
}
......
}
}
for(;;)
{
m_wEventArray[0]=m_wShutdownEvent;
m_wEventArray[1]=ov.hEvent;
if(!WaitCommEvent(m_CommPort,&dwEventMask,&ov))
{
if(ERROR_IO_PENDING==GetLastError())
TRACE("WaitCommEvent:Failed to wait events reason:%d",GetLastError());
else
{
TRACE("WaitCommEvent:Failed to wait events reason:%d",GetLastError());
return E_FAIL;
}
}
else
AfxMessageBox("WaitCommEvent returned not zero!");
ClearCommError(m_CommPort, &dwError, &comstat);
DWORD dwait=WaitForMultipleObjects(2,m_wEventArray,FALSE,INFINITE);
AfxMessageBox("WaitForMultipleObjects has returned!");
switch(dwait)
{ case 1: //WAIT_OBJECT_0+1
{
AfxMessageBox("one of the 2 events occured!");
ResetEvent(ov.hEvent);
//m_wEventArray[1]=ov.hEvent;
break;
}
......
}
}
if(!WaitCommEvent(m_CommPort,&dwEventMask,&ov))
和
DWORD dwait=WaitForMultipleObjects(2,m_wEventArray,FALSE,INFINITE);
一起都运行了两次。说不定就是有两次事件...你可以改用阻塞的WaitCommEvent模式看看是不是这样