WEB开发网
开发学院软件开发VC Win32串口编程 阅读

Win32串口编程

 2007-03-17 22:00:53 来源:WEB开发网   
核心提示: 异步读串口的示例代码:char lpInBuffer[1024];DWORD dwBytesRead=1024;COMSTAT ComStat;DWORD dwErrorFlags;OVERLAPPED m_osRead;memset(&m_osRead,0,sizeof(OVERLAPP

异步读串口的示例代码:char lpInBuffer[1024];
DWORD dwBytesRead=1024;
COMSTAT ComStat;
DWORD dwErrorFlags;
OVERLAPPED m_osRead;
memset(&m_osRead,0,sizeof(OVERLAPPED));
m_osRead.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
ClearCommError(hCom,&dwErrorFlags,&ComStat);
dwBytesRead=min(dwBytesRead,(DWORD)ComStat.cbInQue);
if(!dwBytesRead)
return FALSE;
BOOL bReadStatus;
bReadStatus=ReadFile(hCom,lpInBuffer,
           dwBytesRead,&dwBytesRead,&m_osRead);
if(!bReadStatus) //如果ReadFile函数返回FALSE
{
  if(GetLastError()==ERROR_IO_PENDING)
  //GetLastError()函数返回ERROR_IO_PENDING,表明串口正在进行读操作  
  {
    WaitForSingleObject(m_osRead.hEvent,2000);
    //使用WaitForSingleObject函数等待,直到读操作完成或延时已达到2秒钟
    //当串口读操作进行完毕后,m_osRead的hEvent事件会变为有信号
    PurgeComm(hCom, PURGE_TXABORT|
      PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
    return dwBytesRead;
  }
  return 0;
}
PurgeComm(hCom, PURGE_TXABORT|
     PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
return dwBytesRead;
  对以上代码再作简要说明:在使用ReadFile 函数进行读操作前,应先使用ClearCommError函数清除错误。ClearCommError函数的原型如下:BOOL ClearCommError(
  HANDLE hFile,  // 串口句柄
  LPDWORD lpErrors,  // 指向接收错误码的变量
  LPCOMSTAT lpStat  // 指向通讯状态缓冲区
  );  
该函数获得通信错误并报告串口的当前状态,同时,该函数清除串口的错误标志以便继续输入、输出操作。

上一页  4 5 6 7 8 9 10  下一页

Tags:Win 串口 编程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接