C++ 中的单线程异步代码17

Single-threaded asynchronous code in C++17

提问人:Pavel Zdenek 提问时间:8/29/2023 最后编辑:Pavel Zdenek 更新时间:8/30/2023 访问量:62

问:

我正在为具有嵌入式 Linux 的非常有限的设备开发一种智能 UDP/TCP 代理。该设备具有规定的 SDK,因此我仅限于 GCC C++17,不能使用 Clang 或 C++20。我使用 Boost 1.83 ASIO 套接字 async_* 方法很好地运行了基础知识。但是在更大的使用量下,回调地狱开始迅速蔓延,将其隐藏在盖子下很乏味。

我正在寻找一个等效的未来链接,沿着现有的提升功能,但没有线程。有趣的是,Boost 1.83 在 C++17 示例中列出了协程,但它没有编译 - 我不希望它编译,因为关键的 Boost 内部符号 BOOST_ASIO_HAS_CO_AWAIT 没有在我的堆栈中定义。

我如何理解 Boost 完成令牌文档中的示例:

  1. 传递 lambda 函数(或等效的绑定函数签名)是我现在所做的。
  2. use_future很有前途,但我了解到,与 Boost 未来相反,没有,但无论如何,我认为它由线程池提供支持,因为它无法识别任何事件循环。std::futurethen()
  3. co_await(等人)我不能在我的堆栈中使用。

我知道有一些很好的社区实现完全符合我的期望,例如 https://github.com/xhawk18/promise-cpp,但我更喜欢使用尽可能少的外部依赖项

C++ 异步 C++17 Boost-ASIO 未来

评论


答: 暂无答案