在我的线程监视函数(对串口触发事件进行监视)的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;
       }
             ......
           }
       }

解决方案 »

  1.   

    你这么多 AfxMessageBox,到底是哪个显示了两次?
      

  2.   

    大哥,是这个函数WaitForMultipleObjects被调用了两次,可是在设置了ResetEvent(ov.hEvent)后,第二次不应该返回的啊,因为没有监视事件被触发。急等,望赐教~
      

  3.   

    那就是说你的
     if(!WaitCommEvent(m_CommPort,&dwEventMask,&ov)) 

     DWORD dwait=WaitForMultipleObjects(2,m_wEventArray,FALSE,INFINITE);
    一起都运行了两次。说不定就是有两次事件...你可以改用阻塞的WaitCommEvent模式看看是不是这样