Boost Asio和Co_await-与任何第三方回调一起使用
Boost ASIO and co_await- use with any third party callback?
一个简单的功能:
awaitable<std::size_t> write(const std::vector<uint8_t>& data)
{
auto token = co_await this_coro::token();
return co_await async_write(serialport_, buffer(data), token);
}
可以使用co_await write(my_data)
等待。
当我使用任何异步Boost ASIO函数时,这起作用。
如果异步函数是一些无关库的回调,将如何使用此模式?
代码可能看起来像:
awaitable<bar> foo()
{
auto token = co_await this_coro::token();
return co_await third_party_callback;
}
用法将像auto result = co_await foo()
。
我很难弄清楚哪种最简单/最干净的方法是。
奖励问题:Boost Asio的Coroutines API(例如令牌),Boost的Coroutines库和Coroutines TS?
要使用另一个库,另一个库必须为Coroutines TS创建支持,或者您(或其他人)必须在Coroutines TS所需的内容之间提供"胶水"代码上班和第三方图书馆。
一旦您了解Coroutines TS需要什么,就可以做到这一点。
您可以在CO例程中阅读Lewis Baker文章。现在有很多人介绍该主题的视频和文章。一旦您了解了要求,只要您有某种方式可以发出信号,那么支持其他等待类型就很简单了
如果第三方库只是进行一些重大处理工作。您可能想将工作包裹为某种增强的未来/承诺设置,并使用已经存在的Boost线胶代码(尽管Boost ASIO示例早于Boost ASIO ASIO实验支持。
。实验令牌是CO例程TS和Boost Asio之间的"胶水"代码(据我所知)。它与Boost的Coroutine库无关。
Boost Asio支持3种CO例程类型:
- 无固定的Coroutines-使用预处理器宏(现在已经存在很长时间) boost asio asio asio自己的轻巧co常规库
- 堆叠式Coroutines-使用Boost Coroutine Library
- Coroutines TS支持(实验) - 使用CO常规TS(也是无stack)
相关文章:
- 架构决策:返回std::future还是提供回调
- 正在为Xtensa simcall函数编写回调函数
- 如何在C++中使用非静态成员函数作为回调函数
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 用于在回调中调用解析器的设计模式
- 如何使用C++对象的成员函数作为 C 样式回调?
- Java从C++回调到C++回调
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 从不同的 cpp 调用回调函数会导致bad_function_call
- pcap_handler回调仅在使用 NPCAP v0.9991 时包含空数据包
- 不带轮询的 SDL2 事件回调
- C++存储带有可变参数的回调
- 如何使用 Node-addon-API 实现 node-nan 回调
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- 访问类C++ C 样式回调
- 处理类内的回调时,必须调用对非静态成员函数的引用
- Boost Asio和Co_await-与任何第三方回调一起使用
- 如何在第三方库调用的回调函数中传递/使对象/变量可访问
- 来自第三方静态库的回调中出现未捕获的异常