如何使用boost :: asio动态更改串口速度(或如何查明硬件缓冲区是否为空)?

Dag*_*ago 7 c++ serial-port boost-asio

我对boost :: asio和boost :: asio :: serial_port设备有一个特殊的问题.代码最终与异步读取和东西很好地工作,但我无法弄清楚如何动态地改变串行端口的速度.

我现在要做的就是告诉连接在我的串口中的设备将串口速度改为38400波特,然后通过以下方式将我的计算机串口设置为相同的速度:

port_.set_option(boost::asio::serial_port_base::baud_rate(rate));

但真正发生的是,如果我执行set_option部分,设备永远不会收到更改速度的命令.如果我没有执行set_option部分,则设备会正确更改速度.从我收集的内容发生的事情是(阻塞,同步)写入将东西放入我的计算机上的硬件缓冲区并返回,然后执行丢弃缓冲区的set_option(在它有时间将数据发送到设备之前).因此,在重新配置计算机串口之前,我需要考虑一些方法来检查硬件缓冲区是否为空,并且设备确实已收到更改速度的命令.如果我必须在端口上执行close()和open()以使速度更改生效,我也找不到任何信息.我也想知道close()是否丢弃缓冲区中的东西......我正在使用USB->串口适配器,如果它有任何区别,我的平台是Ubuntu 10.10.

Kie*_*eli 0

您是否尝试刷新缓冲区或寻找合适的刷新替代方案?

客户端和服务器是否在同一个进程中?

Boost.Asio iostream 刷新不起作用?