You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求协助:将代码从Boost 1.60升级至Boost 1.82,需替代废弃方法

Boost 1.60 升级到 1.82:Asio 废弃 API 替代方案

核心变化说明

Boost Asio 在后续版本中完成了 API 迭代:用io_context替代旧的io_service,弃用deadline_timer改用基于时钟的定时器类。以下是你代码中各失效部分的具体替换方案:

1. deadline_timer 的替代

旧代码:

timer(port.get_io_service());//boost::asio::deadline_timer timer;

替换为:
推荐使用steady_timer(基于单调时钟,不受系统时间调整影响),构造时直接传入io_context实例:

boost::asio::io_context io_ctx;
boost::asio::steady_timer timer(io_ctx);

若需依赖系统时钟,可改用boost::asio::system_timer。

2. get_io_service().reset() 的替代

旧代码:

port.get_io_service().reset();//boost::asio::serial_port& port;

替换为:
直接调用serial_port关联的io_context对象的reset()方法(serial_port构造时需传入io_context):

io_ctx.reset();

3. async_read 用法调整

旧代码:

boost::asio::async_read(port, boost::asio::buffer(&c, 1);

async_read本身仍可使用,但需补全符合当前版本要求的回调函数:

char c;
boost::asio::async_read(port, boost::asio::buffer(&c, 1),
    [&](const boost::system::error_code& ec, std::size_t bytes_transferred) {
        if (!ec) {
            // 处理读取到的字符c
        }
    });

4. get_io_service().run() 的替代

旧代码:

port.get_io_service().run();

替换为直接调用io_context的run()方法:

io_ctx.run();

完整替换后的代码示例

#include <boost/asio.hpp>
#include <boost/system/error_code.hpp>

int main() {
    boost::asio::io_context io_ctx;
    boost::asio::serial_port port(io_ctx, "/dev/ttyUSB0"); // 替换为你的实际串口路径

    // 替代原deadline_timer
    boost::asio::steady_timer timer(io_ctx);

    char c;
    // 异步读取串口数据
    boost::asio::async_read(port, boost::asio::buffer(&c, 1),
        [&](const boost::system::error_code& ec, std::size_t bytes_transferred) {
            if (!ec) {
                // 此处添加读取后的业务逻辑
            }
        });

    io_ctx.reset(); // 重置io_context以准备运行
    io_ctx.run();   // 启动事件循环处理异步操作

    return 0;
}

额外注意事项

  • 所有Asio对象(serial_port、steady_timer等)必须关联同一个io_context实例,不能再通过对象间接获取服务。
  • 若需实现超时逻辑,steady_timer可通过expires_after()/expires_at()设置超时时间,配合async_wait()完成回调。

内容的提问来源于stack exchange,提问作者al072

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 06:05:10