|
GKD.RoboCtrl
RoboMaster Linux 电控:异步 IO、设备驱动与机器人控制
|
将同一异步流上的写操作串行化。 更多...
将同一异步流上的写操作串行化。
单线程事件循环不能保证多个协程发起的异步写操作不会交错。 该队列复制待发送数据,并由唯一 writer 协程按入队顺序发送。
在文件 write_queue.hpp 第 43 行定义.
#include <write_queue.hpp>
Public 类型 | |
| using | writer_type = std::function< awaitable< void >(std::span< const std::byte >)> |
Public 成员函数 | |
| write_queue (writer_type writer) | |
| write_queue (const write_queue &)=delete | |
| write_queue & | operator= (const write_queue &)=delete |
| awaitable< void > | send (std::span< const std::byte > data, std::shared_ptr< void > keepalive={}) |
| awaitable< void > | send_latest (std::uint64_t key, std::span< const std::byte > data, std::shared_ptr< void > keepalive={}) |
| 按 key 入队,并用新数据替换同 key 的尚未发送项。 | |
| bool | failed () const noexcept |
| writer 是否已经失败。 | |
| using roboctrl::io::write_queue::writer_type = std::function<awaitable<void>(std::span<const std::byte>)> |
在文件 write_queue.hpp 第 45 行定义.
|
inlineexplicit |
在文件 write_queue.hpp 第 47 行定义.
|
inlinenoexcept |
|
inline |
在文件 write_queue.hpp 第 52 行定义.
|
inline |
按 key 入队,并用新数据替换同 key 的尚未发送项。
正在执行的写操作已经从队列弹出,无法撤回;该操作保证其后至多保留一个 同 key 的 pending 项。替换会在容量检查前完成,因此队列已满时同 key 的 安全停机帧仍可覆盖旧控制帧。
在文件 write_queue.hpp 第 65 行定义.
被这些函数引用 roboctrl::io::can::send().