社区
C++ 语言
帖子详情
请教:事件驱动I/0方式读串口的超时问题
ashamwolf
2005-08-02 03:23:07
SetCommMask(hComm,EV_RXHAR);
if(WaitCommEvent(hComm,&dwEvent,NULL))
{
//读串口
}
现在的问题是:如果串口没有数据送过来,程序就会在WaitCommEvent这里一直停住了,SetCommTimeouts设置的超时对WaitCommEvent不起作用,怎么样才能让WaitCommEvent在超时之后跳过呢?除了另外设置定时器还有没有更简单的方法?
哪位老兄指点一下,多谢了!!!
...全文
455
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
打赏
举报
回复
多线程,异步模式~~
深入Windows RS232
串口
编程:从API原理到异步I/O实战
串口
通信作为嵌入式、工控和仪器仪表领域的基础通讯
方式
,其核心在于实现设备间的可靠数据交换。其工作原理基于异步串行传输协议,通过配置波特率、数据位和校验位等参数确保数据准确收发。掌握底层
串口
编程技术,对于开发高可靠性的数据采集、设备控制和工业自动化系统具有重要价值。在实际应用中,开发者常需处理二进制数据帧、
超时
机制和复杂的硬件握手信号。本文聚焦于Windows平台,通过解析CreateFile、ReadFile、WriteFile等核心API,并深入探讨异步重叠I/O(Overlapped I/O)模式,指导
异步非阻塞
串口
通讯
目录:
1. 异步非阻塞
串口
通讯的优点
2. 异步非阻塞
串口
通讯的基本原理
3. 异步非阻塞
串口
通讯的基础知识
4. 异步非阻塞
串口
通讯的实现步骤
2005.01.05
一,异步非阻塞
串口
通讯的优点
读
写串行口时,既可以同步执行,也可以重叠(异步)执行。
在同步执行时,函数直到操作完成后才返回。这意味着在同步执行时线程会被阻塞,从而导致效率下降。
在重叠执行时,即使操作还未完成,调用的函数也会立
Java
串口
通信性能优化:jSerialComm缓冲区配置与
超时
处理
jSerialComm是一款强大的Java
串口
通信库,提供跨平台的
串口
访问能力。在实时数据传输场景中,缓冲区配置和
超时
处理直接影响系统稳定性与响应速度。本文将详解如何通过优化缓冲区大小、合理设置
超时
参数,以及采用
事件驱动
模型提升jSerialComm的通信性能,帮助开发者解决数据丢失、延迟过高等常见
问题
。 ## 一、缓冲区配置:平衡吞吐量与响应速度 ### 1.1 缓冲区大小的默认设置与限制
MFC
串口
通信实战:工业级可靠性与异步
事件驱动
架构详解
串口
通信作为计算机与外部硬件设备进行数据交换的基础接口技术,其核心原理在于通过串行
方式
逐位传输数据,实现设备间的可靠通信。在Windows平台下,高效的
串口
通信需要解决异步I/O与用户界面响应之间的矛盾,这通常通过
事件驱动
模型与多线程协作来实现。其技术价值在于能够为工业控制、嵌入式上位机、老旧设备维护等对稳定性要求极高的场景提供坚实的底层通信保障。在这些应用场景中,程序需要长时间稳定运行,实时处理来自PLC、仪器仪表等设备的
串口
数据流。本文聚焦于利用MFC框架构建工业级可靠的
串口
通信模块,深入剖析如何将异步
SBUF与中断的完美共舞:构建高效的51单片机
串口
事件驱动
模型
本文深入探讨了51单片机SBUF寄存器与中断机制的协同工作原理,详细讲解了如何构建高效的
串口
事件驱动
模型。通过双缓冲器架构、环形缓冲区设计和状态机协议解析等核心技术,实现高速数据流的可靠处理,有效避免数据丢失和系统阻塞,提升嵌入式系统的实时响应能力与稳定性。
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章