BOOL bSuccess = ReadFile(m_hComm, lpBuf, dwCount, &dwBytesRead, &overlapped);
    dwSignaledHandle=::WaitForMultipleObjects(3,WaitHandles,false,INFINITE); 或
    this->m_pPort->GetSerialPort()->GetOverlappedResult(overlapped,this->m_InBufferCount,false)这个两个函数(WaitForMultipleObject or GetOverlappedResult),它会以COMMTIMEOUTS中设置的timeout来返回吗?
也就是说Overlapped中的Event是在什么时候激活的。
比方说我要读1000bytes,是否等我读完1000个才叫IO操作结束,
还是有timeout (IO操作的timeout)到了就有event激活

解决方案 »

  1.   

    使用了OVERLAPPED的ReadFile操作,会立即返回,但只有
    当读文件(端口)的操作完成后,overlapped中的event才会被置为有信号。
    你可以等待这个event来判断是否完成操作。
      

  2.   

    COMMTIMEOUTS定义的超时是针对端口操作的,如其中的ReadIntervalTimeout
    定义的就是从读取一个字符开始,到接收到第二个字符的最大时间间隔,如果这个时间
    间隔超过次最大间隔,就意味着ReadFile操作完成,然后设置event为有信号。
        WaitForSingleObject或WaitForMutipleObject函数的超时是定义的是从代码
    运行到这里时开始,到等待的信号量有信号的最大时间间隔,如实际间隔大于这个间隔,
    就返回WAIT_TIMEOUT。
      

  3.   

    To:qgw_2000(宇宙骑士)
    我问的就是Event为有信号的条件(针对serial port)
    是否是:
    一。读完/写完 指定字节数,就会设置event为有信号。
    二。出现读/写 timeout(COMMTIMEOUTS定义的超时).
      

  4.   

    当读操作完成就设置event为有信号,此时可能读到的字节数小于指定字节数;
    读写操作超时也会设置event为有信号。