社区
C++ 语言
帖子详情
请教:事件驱动I/0方式读串口的超时问题
ashamwolf
2005-08-02 03:23:07
SetCommMask(hComm,EV_RXHAR);
if(WaitCommEvent(hComm,&dwEvent,NULL))
{
//读串口
}
现在的问题是:如果串口没有数据送过来,程序就会在WaitCommEvent这里一直停住了,SetCommTimeouts设置的超时对WaitCommEvent不起作用,怎么样才能让WaitCommEvent在超时之后跳过呢?除了另外设置定时器还有没有更简单的方法?
哪位老兄指点一下,多谢了!!!
...全文
389
8
打赏
收藏
请教:事件驱动I/0方式读串口的超时问题
SetCommMask(hComm,EV_RXHAR); if(WaitCommEvent(hComm,&dwEvent,NULL)) { //读串口 } 现在的问题是:如果串口没有数据送过来,程序就会在WaitCommEvent这里一直停住了,SetCommTimeouts设置的超时对WaitCommEvent不起作用,怎么样才能让WaitCommEvent在超时之后跳过呢?除了另外设置定时器还有没有更简单的方法? 哪位老兄指点一下,多谢了!!!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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个:打开、关闭、
读
和写。 三、支持
串口
的互斥操作,多个任务竞争使用
串口
,保证正常分配
串口
资源,有利于写出高效率的与
串口
通信有关的线程(任务) 四、代码简练,支持N个
串口
五、不清楚
ARM经典300问
-- 作者:白开水
-- 发布时间:2007-07-13 14:02:53
-- ARM经典300问
第1章 体系结构
第1问:
Q:请问在初始化CPU堆栈的时候一开始在执行mov r0, LR这句指令时处理器是什么模式
A:复位后的模式,即管理模式.
第2问:
Q:
请教
:MOV中的8位图立即数,是怎么一回事 0xF0000001是怎么来的
A:是循环右移,就是一个0—255
高负载高并发网站架构分析
由于自己正在做一个高性能大用户量的论坛程序,对高性能高并发服务器架构比较感兴趣,于是在网上收集了不少这方面的资料和大家分享。希望能和大家交流 msn: defender_ios@hotmail.com ——————————————————————————————————————— 初创网站与开源软件 6 谈谈大型高负载网站服务器的优化心得! 8 Lighttpd+S
Qt开发经验(转载)
本文转载于https://qtchina.blog.csdn.net/?type=blog,feiyangqingyun的博客,感谢大佬的经验分享。 默认QtCreator是单线程编译,可能设计之初考虑到尽量不过多占用系统资源,而现在的电脑都是多核心的,默认msvc编译器是多线程编译的不需要手动设置,而对于其他编译器,需要手动设置才行。 方法一:在每个项目的构建设置中(可以勾选一个 shadow build 的页面地方)的build步骤,make arguments增加一行 -j16 即可,此设置会保
【技术三千问】之《AT组件
问题
汇总与解析》,干货汇总!
#关于AT组件的常见
问题
解答: 1.AT组件使用
问题
: AT client 目前不支持多客户端,即多实例吗? URC 网络数据处理有
问题
怀疑 URC 里有换行符时,无法解析? https://club.rt-thread.org/ask/question/7664.html 2.官方AT客户端应用笔记的几个小tip https://club.rt-thread.org/ask/question/7670.html 3.rt_therad AT组件移植不成功(结贴) https://club.rt-thre
C++ 语言
65,187
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章