GKD.RoboCtrl
RoboMaster Linux 电控:异步 IO、设备驱动与机器人控制
载入中...
搜索中...
未找到
roboctrl::io::write_queue类 参考

将同一异步流上的写操作串行化。 更多...

详细描述

将同一异步流上的写操作串行化。

单线程事件循环不能保证多个协程发起的异步写操作不会交错。 该队列复制待发送数据,并由唯一 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 是否已经失败。
 

成员类型定义说明

◆ writer_type

using roboctrl::io::write_queue::writer_type = std::function<awaitable<void>(std::span<const std::byte>)>

在文件 write_queue.hpp 第 45 行定义.

构造及析构函数说明

◆ write_queue()

roboctrl::io::write_queue::write_queue ( writer_type  writer)
inlineexplicit

在文件 write_queue.hpp 第 47 行定义.

成员函数说明

◆ failed()

bool roboctrl::io::write_queue::failed ( ) const
inlinenoexcept

writer 是否已经失败。

失败会被锁存;后续 send/send_latest 会重抛原异常,恢复需要重建 IO。

在文件 write_queue.hpp 第 76 行定义.

◆ send()

awaitable< void > roboctrl::io::write_queue::send ( std::span< const std::byte >  data,
std::shared_ptr< void >  keepalive = {} 
)
inline

在文件 write_queue.hpp 第 52 行定义.

◆ send_latest()

awaitable< void > roboctrl::io::write_queue::send_latest ( std::uint64_t  key,
std::span< const std::byte >  data,
std::shared_ptr< void >  keepalive = {} 
)
inline

按 key 入队,并用新数据替换同 key 的尚未发送项。

正在执行的写操作已经从队列弹出,无法撤回;该操作保证其后至多保留一个 同 key 的 pending 项。替换会在容量检查前完成,因此队列已满时同 key 的 安全停机帧仍可覆盖旧控制帧。

在文件 write_queue.hpp 第 65 行定义.

被这些函数引用 roboctrl::io::can::send().


该类的文档由以下文件生成: