Boost::asio get_io_service() 在 boost 1.70+ 中的替代品

Posted

技术标签:

【中文标题】Boost::asio get_io_service() 在 boost 1.70+ 中的替代品【英文标题】:Boost::asio get_io_service() alternative in boost 1.70+ 【发布时间】:2021-04-27 10:40:00 【问题描述】:

我想使用一个库 (https://github.com/onlinecity/cpp-smpp),它基于 boost 1.41。但在我们的项目中,我们使用的是 1.72。

那里有一个从 TCP 套接字 (socket->get_io_service()here) 获取 io_service 的代码。那么这个对象就用在了以下部分代码中:

deadline_timer timer(ioservice);

ioService.run_one();
ioService.reset();

get_io_service() 已从 boost 1.70+ 中删除。在这种情况下,我应该使用哪些函数和对象而不是那些?

更新

还有另一个问题 (Alternative to deprecated get_io_service()) 与我的类似,但该问题中的答案在这个场景中不起作用。

【问题讨论】:

这些答案在您的情况下如何不起作用?您尝试了什么,错误是什么? 我在***.com/questions/39445636/… 中尝试了答案。 get_executor().context() 的输出为空。 【参考方案1】:

看看这个提交:https://github.com/mavlink/mavros/commit/3da41d770ca0e021f597bef30ffe6fcefe3e6959

它定义了一个宏

#if BOOST_VERSION >= 107000
#define GET_IO_SERVICE(s) ((boost::asio::io_context&)(s).get_executor().context())
#else
#define GET_IO_SERVICE(s) ((s).get_io_service())
#endif

并替换调用

socket.get_io_service()

GET_IO_SERVICE(socket)

【讨论】:

以上是关于Boost::asio get_io_service() 在 boost 1.70+ 中的替代品的主要内容,如果未能解决你的问题,请参考以下文章

Boost::Asio入门剖析

websocketpp 和 boost.asio 有啥区别?

boost::asio 与 boost::unique_future

boost::asio::read() 永远阻塞

Boost Asio总结class address

Boost::Asio : io_service.run() vs poll() 或者我如何在主循环中集成 boost::asio