gpt4 book ai didi

c++ - 在 C++ 中的 Windows 串行端口上设置 low_latency 标志

转载 作者:可可西里 更新时间:2023-11-01 09:35:10 26 4
gpt4 key购买 nike

我有一个使用 boost asio 打开串口的程序。

默认情况下,串行端口具有使线路保持空闲的延迟。在 Windows 平台上,我看到了 30 毫秒的延迟,而在 Linux 平台上,延迟是 20 毫秒。

对于 Linux 环境,我发现“linux.h”的“ioctl”类有一种方法可以使用一些标志来设置串行设置(以及我需要的:low_latency)。

代码如下:

boost::asio::basic_serial_port<boost::asio::serial_port_service>::native_type native = serial_port_.native(); // serial_port_ is the boost's serial port class.
struct serial_struct serial;
ioctl(native, TIOCGSERIAL, &serial);
serial.flags |= ASYNC_LOW_LATENCY; // (0x2000)
ioctl(native, TIOCSSERIAL, &serial);

我也想减少我的 Windows 平台上的延迟。是否有一种等效的方法可以对使用 C++ 的 Windows 执行相同的操作?

顺便说一句,我看到有一些解决方案建议在 Windows 设备管理器中更改串行端口的属性,但我没有这些解决方案显示的那些属性,我需要一个代码解决方案。

最佳答案

获取从 Windows 中的 boost asio 获取的 native 句柄并将其传递给 SetCommTimeouts:http://msdn.microsoft.com/en-us/library/windows/desktop/aa363437(v=vs.85).aspx

特别是看COMMTIMEOUT结构的ReadIntervalTimeout:http://msdn.microsoft.com/en-us/library/windows/desktop/aa363190(v=vs.85).aspx

读取间隔超时通信线路上两个字节到达之间允许经过的最长时间,以毫秒为单位。在 ReadFile 操作期间,时间段从接收到第一个字节开始。如果任何两个字节到达之间的间隔超过此数量,则 ReadFile 操作完成并返回任何缓冲数据。零值表示不使用间隔超时。MAXDWORD 的值与 ReadTotalTimeoutConstant 和 ReadTotalTimeoutMultiplier 成员的零值相结合,指定读取操作将立即返回已接收到的字节,即使没有接收到字节也是如此。

您还可以使用 GetCommTimeouts 查询当前值:http://msdn.microsoft.com/en-us/library/windows/desktop/aa363261(v=vs.85).aspx

关于c++ - 在 C++ 中的 Windows 串行端口上设置 low_latency 标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10718693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com