社区
C++ 语言
帖子详情
请教:事件驱动I/0方式读串口的超时问题
ashamwolf
2005-08-02 03:23:07
SetCommMask(hComm,EV_RXHAR);
if(WaitCommEvent(hComm,&dwEvent,NULL))
{
//读串口
}
现在的问题是:如果串口没有数据送过来,程序就会在WaitCommEvent这里一直停住了,SetCommTimeouts设置的超时对WaitCommEvent不起作用,怎么样才能让WaitCommEvent在超时之后跳过呢?除了另外设置定时器还有没有更简单的方法?
哪位老兄指点一下,多谢了!!!
...全文
408
8
打赏
收藏
请教:事件驱动I/0方式读串口的超时问题
SetCommMask(hComm,EV_RXHAR); if(WaitCommEvent(hComm,&dwEvent,NULL)) { //读串口 } 现在的问题是:如果串口没有数据送过来,程序就会在WaitCommEvent这里一直停住了,SetCommTimeouts设置的超时对WaitCommEvent不起作用,怎么样才能让WaitCommEvent在超时之后跳过呢?除了另外设置定时器还有没有更简单的方法? 哪位老兄指点一下,多谢了!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ashamwolf
2005-08-14
打赏
举报
回复
jiajun2001(嘉俊),你的代码在2000和xp里面没问题,但是在98和NT里面运行的话,WaitForSingleObject总是返回超时。有什么办法可以解决吗?
Jagen在路上
2005-08-05
打赏
举报
回复
不用异步方式打开的话,就没有超时可供你设置
qinxiaogang
2005-08-03
打赏
举报
回复
WaitCommEvent: 都是用在线程里的.主程序当然不能用!
ashamwolf
2005-08-03
打赏
举报
回复
如果串口设备还没处理完第一个命令就不能再向它发送第二个命令,这样的情况应该不能用异步方式来打开串口吧
Jagen在路上
2005-08-02
打赏
举报
回复
那么建议楼主使用重叠I/O
首先使用FILE_FLAG_OVERLAPPED标志打开你的串口。
之后的代码类似如下:
OVERLAPPED overlapped;
if ( !WaitCommEvent( hComm, &dwEvent, &overlapped ) )
{
if ( GetLastError() == ERROR_IO_PENDING )
{
DWORD ret = WaitForSingleObject( overlapped.hEvent, 1000); //这个地方你可以设置超时
if ( ret == TIME_OUT )
{
..超时处理..
}
DWORD dwByte; // 仅用作参数,无意义
ret = GetOverlappedResult( hComm, &overlapped, &dwByte, FALSE )
if ( ret == 0 )
{
..相应的错误处理..
}
}
else
{
..相应的错误处理..
}
}
..这里你就可以读取数据了。
ashamwolf
2005-08-02
打赏
举报
回复
我的程序要处理的是这样的情况:向串口设备发送一个命令,然后读取设备的返回。每个命令对应一个返回,从返回的内容不能区别出是哪条命令的返回,所以用多线程不合适。
healer_kx
2005-08-02
打赏
举报
回复
那你就让他好使,你要多看MSDN。
OpenHero
2005-08-02
打赏
举报
回复
多线程,异步模式~~
比zlg
串口
中间件好的UART
串口
驱动(带
超时
的同步操作)
比zlg
串口
中间件好的UART
串口
驱动(带
超时
的同步操作) 引言 以下的
串口
驱动是我在一个产品中实现了的,其特点: 一、支持FIFO,系统开销小,中断少 二、在多任务操作系统里使用
串口
很简单,对
串口
操作就4个:打开...
ARM经典300问
<br />-- 作者:白开水<br />-- 发布时间:2007-07-13 14:02:53<br />-- ARM经典300... <br /><br />第2问: <br />Q:
请教
:MOV中的8位图立即数,是怎么一回事 0xF0000001是怎么来的 <br />A:是循环右移,就是一个0—255
高负载高并发网站架构分析
太复杂的设计容易降低开发效率,提高维护成本,在出现性能
问题
或者突发事件的时候也不容易找到原因。 另外一个
问题
是开源软件的后期维护和继续开发可能会存在
问题
,这一点不是绝对的,取决于开源软件的架构是否...
Qt开发经验(转载)
//循环取出控件的自定义属性, int i = 0 表示所有属性 for (int i = propertyOffset; i ; ++i) { QMetaProperty metaProperty = metaObject->property(i); const char *name = metaProperty.name(); const char *...
【技术三千问】之《AT组件
问题
汇总与解析》,干货汇总!
#关于AT组件的常见
问题
解答: 1.AT组件使用
问题
: AT client 目前不支持多客户端,即多实例吗? URC 网络数据处理有
问题
怀疑 URC 里有换行符时,无法解析? https://club.rt-thread.org/ask/question/7664.html 2....
C++ 语言
65,206
社区成员
250,519
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章