ReadFile, WriteFile超时

davidcao007 2011-04-29 11:44:58
我在用ReadFile, WriteFile 读写串口, 怎么判断超时啊,同步的方式下的,

没有超时的话,就在一直读,然后界面就卡死了,我想是过了特定多少秒,没有反应的话,就返回 然后弹出超时对话框
...全文
326 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenjiawei007 2011-04-29
  • 打赏
  • 举报
回复
查看你的超时设置是否准确,超时结构体:


COMMTIMEOUTS to;
to.ReadIntervalTimeout = MAXDWORD;
to.ReadTotalTimeoutConstant = 0;
to.ReadTotalTimeoutMultiplier = 0;
to.WriteTotalTimeoutConstant = 10;
to.WriteTotalTimeoutMultiplier = 500;
SetCommTimeouts(m_hCom, &to);


读写完串口时需要用purge()接口释放优先权或者用sleep(1);来释放
__lhy 2011-04-29
  • 打赏
  • 举报
回复
同步
开启线程write或者read 然后使用SetTimer定时 到时未返回 超时
xiaopoy 2011-04-29
  • 打赏
  • 举报
回复
/:^]
msdn上就有说明的:

if hFile was created with FILE_FLAG_OVERLAPPED.
the lpOverlapped parameter must not be NULL. It must point to a valid OVERLAPPED structure.
传入的Overlapped结构中的hEvent在读取完成时就会被SetEvent。Overlapped中的Offset设置成要开始读取的偏移,也就是 SetFilePointer要设置的地址。
简短的操作它的方式是HasOverlappedIoCompleted判断是否完成和 CancelIo取消操作。
因此可以创建一个新线程的方式来读取,每隔一会儿HasOverlappedIoCompleted判断下是否已读取完即可。

http://msdn.microsoft.com/en-us/library/aa365467(v=vs.85).aspx
yanganglove 2011-04-29
  • 打赏
  • 举报
回复
这两个函数的最后一个参数是OVERLAPPED结构体,在这个结构体中可以传一个事件Handle 。

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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