ReadFile的异步读取

LeeVondge 2017-03-31 04:34:55
在写一个读取虚拟串口的数据的程序,使用Ceadfile的异步模式:
HANDLE hcom = CreateFileW(L"com8",GENERIC_READ|GENERIC_WRITE,0,\
NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,\
NULL);
事件对象设置为人工重置:
dlg->m_ov.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
然后使用ReadFile循环读取
while(true){
ret_value = ReadFile(hcom,bufBk,1024,&recv_num,&dlg->m_ov);
if(!ret_value)
{
lastError=GetLastError();
if(lastError==ERROR_IO_PENDING)
{
WaitForSingleObject(dlg->m_ov.hEvent,INFINITE);
if(dlg->StopScanFlag)
break;

bufBk = bufBk+strlen(bufBk);
continue;
}
}
}
ResetEvent(dlg->m_ov.hEvent);
}
但是读取的时候 发现,WaitForSingleObject每次都是直接返回,也就是ReadFile 每次都会将事件兑现设置为有信号状态,结果是在while与continue之间不断循环。
...全文
1013 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
#Page# 2020-03-28
  • 打赏
  • 举报
回复
readfile你不是要读n个字节吗?读到了n个就触发这个event,waitforsingleobject返回wait_object0。如果在读到n个字节之前就超时,那么就跑到wait_timeout那里了。
另外,你要高清waitforsingleobject要等的是readfile的handle呢,还是event的handle。
LeeVondge 2017-03-31
  • 打赏
  • 举报
回复
我想问一下,ReadFile到底是根据什么条件将WaitForSingleObject的事件对象设置为有信号的???

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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