我想请问一下 在读串口 异步操作的时候
       if(GetLastError()==ERROR_IO_PENDING)
       {
        GetOverlappedResult(hCom,
         &m_osRead,&dwBytesRead,TRUE);        return dwBytesRead;
       }或者:
 if(GetLastError()==ERROR_IO_PENDING)
  {
       WaitForSingleObject(m_osRead.hEvent,2000);
       PurgeComm(hCom, PURGE_TXABORT|
        PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
       return dwBytesRead;
 }GetOverlappedResult函数和WaitForSingleObject函数的区别?还有就是这两个函数执行的时候,会一直占用cpu吗?还是会主动交出控制权,转去执行其他进程,等到传输完毕再返回向下执行?
另外,为什么GetOverlappedResult没有用PurgeComm清除缓冲区数据?

解决方案 »

  1.   

    GetOverlappedResult - 返回值
    Long,非零表示成功,零表示失败。会设置GetLastError。如bWait为FALSE,而且异步操作仍在执行,则函数回返回零,而GetLastError会设置成ERROR_IO_INCOMPLETE 
    GetOverlappedResult - 参数表
    参数 类型及说明 
    hFile Long,指定一个文件、管道或通信设备的句柄 
    lpOverlapped OVERLAPPED,为欲检查的I/O操作指定的一个结构 
    lpNumberOfBytesTransferred Long,用于容纳传输字节数量的一个变量 
    bWait Long,如果为TRUE,就一直等到异步操作结束才返回。FALSE表示立即返回