设为首页 加入收藏

TOP

VC++串口通信编程详解(四)
2016-04-23 04:08:58 】 浏览:3344
Tags:串口 通信 编程 详解
DWORD fTxim : 1; // character waiting for Tx DWORD fReserved : 25; // reserved DWORD cbInQue; // bytes in input buffer DWORD cbOutQue; // bytes in output buffer } COMSTAT, *LPCOMSTAT;
本文只用到了cbInQue成员变量,该成员变量的值代表输入缓冲区的字节数。

最后用PurgeComm函数清空串口的输入输出缓冲区。
这段代码用WaitForSingleObject函数来等待OVERLAPPED结构的hEvent成员,下面我们再演示一段调用GetOverlappedResult函数等待的异步读串口示例代码:

char lpInBuffer[1024];

DWORD dwBytesRead=1024;

BOOL bReadStatus;

DWORD dwErrorFlags;

COMSTAT ComStat;

OVERLAPPED m_osRead;

ClearCommError(hCom,&dwErrorFlags,&ComStat);

if(!ComStat.cbInQue) return 0;

dwBytesRead=min(dwBytesRead,(DWORD)ComStat.cbInQue);

bReadStatus=ReadFile(hCom, lpInBuffer,dwBytesRead, &dwBytesRead,&m_osRead);

if(!bReadStatus) //如果ReadFile函数返回FALSE

{ if(GetLastError()==ERROR_IO_PENDING)

{ GetOverlappedResult(hCom, &m_osRead,&dwBytesRead,TRUE);

// GetOverlappedResult函数的最后一个参数设为TRUE,

//函数会一直等待,直到读操作完成或由于错误而返回。

return dwBytesRead; }

return 0; }

return dwBytesRead;
异步写串口的示例代码:
char buffer[1024];

DWORD dwBytesWritten=1024;

DWORD dwErrorFlags;

COMSTAT ComStat;

OVERLAPPED m_osWrite;

BOOL bWriteStat;

bWriteStat=WriteFile(hCom,buffer,dwBytesWritten, &dwBytesWritten,&m_OsWrite);

if(!bWriteStat)

{ if(GetLastError()==ERROR_IO_PENDING)

{ WaitForSingleObject(m_osWrite.hEvent,1000);

return dwBytesWritten; }

return 0; }

return dwBytesWritten;

4、关闭串口

利用API函数关闭串口非常简单,只需使用CreateFile函数返回的句柄作为参数调用CloseHandle即可:

BOOL CloseHandle(
HANDLE hObject; //handle to object to close
);

首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Git 在团队中的最佳实践--如何正.. 下一篇【matlab】:matlab写的一个QQ九宫..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目