关于CSerialPort类的一些问题

a091003040421 2014-02-17 03:55:51
最近在研究串口类CSerialPort其中有两个函数不太明白
一个是bResult = WaitCommEvent(port->m_hComm, &Event, &port->m_ov);
还有一个是Event = WaitForMultipleObjects(3, port->m_hEventArray, FALSE, INFINITE);
这两个函数的关系是什么 ?
WaitCommEvent函数是用来监测串口资源状态的吗?
...全文
255 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dahaiI0 2014-02-18
  • 打赏
  • 举报
回复
引用 4 楼 a091003040421 的回复:
引用 3 楼 dahaiI0 的回复:
WaitCommEvent对应串口事件,比如有数据来,错误信息等。WaitForMultipleObjects等待任意多个内核对象句柄,两者没有一毛钱关系
但是CSerialPort类中 使用WaitForMultipleObjects来监视串口的发送接收和关闭事件 WaitCommEvent也可以监视这些事件吧
WaitForMultipleObjects应该不能用来监视串口的发送接收(假如能,你如何区分事件类型?),监视关闭还差不多,而且个人觉得好像没必要这么做。关闭直接closehandle就是了,closehandle后再去WaitForMultipleObjects这个句柄是无意义的。
a091003040421 2014-02-18
  • 打赏
  • 举报
回复
引用 6 楼 schlafenhamster 的回复:
WaitForMultipleObjects 是等待内核对象 与WaitCommEvent 不是一回事 WaitCommEvent 等待的是comm 事件 而 WaitForMultipleObjects 是等待内核的事件.
WaitForMultipleObjects 的作用是当定义的三个句柄变为有信号时才返回(stop read write) 而WaitCommEvent 也是在监视串口设备的状态 我不明白的是既然两个都对串口进行了检测(不管是对设备还是对内核)为什么要进行两次监测呢?
a091003040421 2014-02-18
  • 打赏
  • 举报
回复
引用 5 楼 VisualEleven 的回复:
WaitCommEvent Function Waits for an event to occur for a specified communications device. The set of events that are monitored by this function is contained in the event mask associated with the device handle.
事件掩码中好像是有缓冲区接收到字符的啊 为什么不用这个循环等待串口事件而用了WaitForMultipleObjects等待 overlapped对象中的Heven事件句柄呢?
a091003040421 2014-02-18
  • 打赏
  • 举报
回复
引用 8 楼 dahaiI0 的回复:
引用 4 楼 a091003040421 的回复:
[quote=引用 3 楼 dahaiI0 的回复:] WaitCommEvent对应串口事件,比如有数据来,错误信息等。WaitForMultipleObjects等待任意多个内核对象句柄,两者没有一毛钱关系
但是CSerialPort类中 使用WaitForMultipleObjects来监视串口的发送接收和关闭事件 WaitCommEvent也可以监视这些事件吧
WaitForMultipleObjects应该不能用来监视串口的发送接收(假如能,你如何区分事件类型?),监视关闭还差不多,而且个人觉得好像没必要这么做。关闭直接closehandle就是了,closehandle后再去WaitForMultipleObjects这个句柄是无意义的。[/quote] WaitForMultipleObjects 函数在异步通信时会一直等待 当主线程发送数据时会设置写event为有信号所以就被WaitForMultipleObjects函数监视到了 CSerialPort类里面是这样的吧 在读数据时监视的是overlapped数据结构里面的hEvent事件 关闭串口也是监视一个EVENT当串口关闭时设置此EVENT为有信号
schlafenhamster 2014-02-17
  • 打赏
  • 举报
回复
WaitForMultipleObjects 是等待内核对象 与WaitCommEvent 不是一回事 WaitCommEvent 等待的是comm 事件 而 WaitForMultipleObjects 是等待内核的事件.
Eleven 2014-02-17
  • 打赏
  • 举报
回复
WaitCommEvent Function Waits for an event to occur for a specified communications device. The set of events that are monitored by this function is contained in the event mask associated with the device handle.
a091003040421 2014-02-17
  • 打赏
  • 举报
回复
引用 3 楼 dahaiI0 的回复:
WaitCommEvent对应串口事件,比如有数据来,错误信息等。WaitForMultipleObjects等待任意多个内核对象句柄,两者没有一毛钱关系
但是CSerialPort类中 使用WaitForMultipleObjects来监视串口的发送接收和关闭事件 WaitCommEvent也可以监视这些事件吧
dahaiI0 2014-02-17
  • 打赏
  • 举报
回复
WaitCommEvent对应串口事件,比如有数据来,错误信息等。WaitForMultipleObjects等待任意多个内核对象句柄,两者没有一毛钱关系
a091003040421 2014-02-17
  • 打赏
  • 举报
回复
引用 1 楼 schlafenhamster 的回复:
WaitCommEvent函数 ,看看 event 是 事件,表示 有 什么 事件 发生。 如: EV_CTS
大神为什么没有用WaitCommEvent来监视接收和发送事件而要用WaitForMultipleObjects方法来监视呢
schlafenhamster 2014-02-17
  • 打赏
  • 举报
回复
WaitCommEvent函数 ,看看 event 是 事件,表示 有 什么 事件 发生。 如: EV_CTS

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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