Win32 API串行端口 - 如何异步获取可用的字节数?

时间:2016-03-19 20:18:33

标签: c++ winapi asynchronous

Windows 7,x64,C ++,MSVC 2015社区。

我正在编写一个程序,需要识别第一个带有活动的串口。理想情况下,我不想丢失第一个字节。我可以想到四种方法:

  1. 打开所有串口,为每个串口做一个重叠的ReadFile个字节,然后是一个WaitForMulipleEvents。当返回时,关闭非活动端口,并将接收到的字节存储在某个位置,并将后续ReadFile包装在某个已知需要时插入第一个字节的函数中。

    优点:异步,没有民意调查,已经大部分实施 缺点:跟踪一个额外的字节并包装ReadFile很烦人。

  2. 基本上是#1,但找到一些方法将字节推回到串行驱动程序缓冲区的前面。我已经在谷歌上搜索了好几天,但没有找到任何东西。似乎不太可能,但是如果有效则会阻止我跟踪额外的字节。

  3. 打开所有串口并使用ClearCommError轮询可用字节 当某些内容有可用字节时,请关闭其他端口。需要在循环中添加延迟,这样就不会使系统陷入困境。我不想看到100%的CPU利用率,除了等待进来之外什么都不做。

    优点:保持后续的Readfile纯,无需包裹它并追踪额外的字节。 缺点:当看起来应该有异步方法时,轮询很糟糕。我必须调整民意调查之间的延迟,以确保当它可能以高达460kbps的速度进入时不会溢出。

  4. 找到一种使用重叠DeviceIoControl调用的方法,然后WaitForMultipleEvents发出信号,表示字节可用,但我还没找到任何IOCTL...代码这样做。

  5. 我想的越多,#3听起来就像是最好的选择。我不喜欢轮询,但它避免了跟踪额外的字节。

    有一种干净的异步方式来做我需要的吗? I / O完成端口可以发挥作用吗?

    感谢

0 个答案:

没有答案