如何让ReadFile按一个字节读取数据?读取完后不清空缓存可以继续读取

afairycell 2012-04-27 04:35:26
void CDeviConnect::DeviReadForChar(unsigned char *ch)
{
USES_CONVERSION;
OVERLAPPED m_osRead;
memset(&m_osRead,0,sizeof(OVERLAPPED));
m_osRead.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
COMSTAT ComStatR;

DWORD dwErrorFlagsR;

DWORD dwBytesRead=1;//读取的字节数

BOOL bReadStat;
ClearCommError(hCommPort,&dwErrorFlagsR,&ComStatR);
min(dwBytesRead,(DWORD)ComStatR.cbInQue);
dwBytesRead = 1;

bReadStat=ReadFile(hCommPort,ch,
dwBytesRead,&dwBytesRead,&m_osRead);

if(!bReadStat)
{
if(GetLastError()==ERROR_IO_PENDING)
//GetLastError()函数返回ERROR_IO_PENDING,表明串口正在进行读操作
{
WaitForSingleObject(m_osRead.hEvent,2000);
//使用WaitForSingleObject 函数等待,直到读操作完成或延时已达到2 秒钟
//当串口读操作进行完毕后,m_osRead 的hEvent 事件会变为有信号
}
}
PurgeComm(hCommPort,PURGE_TXABORT|
PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);

}

代码是这样的,但是当读取缓存内容时候,读取完1个字符之后却清空了缓存,有什么办法解决?
...全文
420 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2012-04-28
  • 打赏
  • 举报
回复
自己维护一个缓存不就好了
kyotrue 2012-04-28
  • 打赏
  • 举报
回复
你不是自己调用PurgeComm把缓冲区清空了么。。。
hdg3707 2012-04-28
  • 打赏
  • 举报
回复
如果缓冲区里有多个数据,你只读一个,那缓冲区是不会把剩下的9个给清了,除非是缓冲区里只有一个数据或者是你读完一个就执行清除语句
Lactoferrin 2012-04-27
  • 打赏
  • 举报
回复
是不是这个PurgeComm?
运动健将 2012-04-27
  • 打赏
  • 举报
回复
复制一个缓冲区,读完后,再复制回去
fishion 2012-04-27
  • 打赏
  • 举报
回复
..这还真不知道有没有了,或者你申请一个空间来保存读出来的数据吧

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧