解决串口通讯中部分串口ReadFile使用SetCommTimeouts设置超时无效的问题

在串口通讯中(笔者系统为32位win7),为简单起见,经常采用同步方式读取串口数据。即调用CreateFile函数打开串口时,不设置其倒数第二个参数为FILE_FLAG_OVERLAPPED。

      此时,一般需要设置ReadFile读取数据的超时时间,或者直接设置其不论是否读取到数据,都立即返回。否则,可能由于ReadFile无限期等待读取数据而造成线程阻塞。

      设置串口读取和写入的超时时间,采用函数SetCommTimeouts。但笔者发现,有些串口设置读取超时时间后,在ReadFile时仍然会无限期等待,似乎没有起作用。

      查找本机注册表,发现串口列表集中在HKEY_LOCAL_MACHINE/HARDWARE/DEVICEMAP/SERIALCOMM键中。所有无法设置超时时间的串口其键名最后部分都包含“VCOM”。在笔者的电脑中,这些串口都不是实际串口,也不是笔者要操作的串口,故将其从注册表中删除。此后,遍历串口时将不会得到这些串口名,这样就将所有无法设置超时时间的串口都过滤掉了。

      读者实际使用时,也可以根据注册表键名是否包含“VCOM”过滤掉这些串口,而不直接在注册表中删除键值。

备注:在Windows 2000操作系统中,笔者发现采用同步方式打开HID设备后,无法通过SetCommTimeouts设置ReadFile的超时时间。此时就只有通过异步方式读取进行超时控制了。

转:http://blog.csdn.net/whvovi/article/details/6202076

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值