【问题标题】:Boost::asio::serial_port - using io_service.read() function when migrating to boost version 1.7.1Boost::asio::serial_port - 迁移到 boost 1.7.1 版时使用 io_service.read() 函数
【发布时间】:2020-12-15 15:13:22
【问题描述】:

我的任务是将 boost 库的版本更改为更新版本,但我遇到了 Boost::asio::serial_port 的问题。现在代码如下所示:

port_.get_io_service().run();

其中 port_ 是类私有变量,它的初始化如下:

boost::asio::serial_port port_{io_service_};

我正在更改为 1.7.1 版本,并且我一直在阅读有关 get_io_service() 函数已删除的文档,我应该使用 io_context 而不是 io_service。问题是没有函数get_io_context()。 我一直在阅读其他帖子中的一些答案并试图获得解决方案,但它没有奏效。我试过了:

port_.get_executor().context().run();
port_.get_executor().run();

它会产生错误:

error: ‘class boost::asio::execution_context’ has no member named ‘run’
error: ‘boost::asio::basic_serial_port<>::executor_type’ {aka ‘class boost::asio::executor’} has no member named ‘run’

像这样的代码起作用了,但它是一种解决方法,必须有更简单的方法来做到这一点:

boost::asio::io_context& io_context =
    static_cast<boost::asio::io_context&>(port_.get_executor().context());
io_context.run();

有什么想法吗?

【问题讨论】:

    标签: c++ boost boost-asio


    【解决方案1】:

    我认为您可以只使用标准构造函数来创建 io_context。像这样:

    boost::asio::io_context io_context;
    
    // Submit a function to the io_context.
    boost::asio::post(io_context, my_task);
    
    // Submit a lambda object to the io_context.
    boost::asio::post(io_context,
        []()
        {
          ...
        });
    
    // Run the io_context until it runs out of work.
    io_context.run();
    

    来自: https://www.boost.org/doc/libs/develop/doc/html/boost_asio/reference/io_context.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      • 2012-12-05
      相关资源
      最近更新 更多