Boost::asio::serial_port - 迁移到 boost 1.7.1 版时使用 io_service.read() 函数

Posted

技术标签:

【中文标题】Boost::asio::serial_port - 迁移到 boost 1.7.1 版时使用 io_service.read() 函数【英文标题】:Boost::asio::serial_port - using io_service.read() function when migrating to boost version 1.7.1 【发布时间】: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();

有什么想法吗?

【问题讨论】:

【参考方案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

【讨论】:

以上是关于Boost::asio::serial_port - 迁移到 boost 1.7.1 版时使用 io_service.read() 函数的主要内容,如果未能解决你的问题,请参考以下文章