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() 函数的主要内容,如果未能解决你的问题,请参考以下文章