|
GKD.RoboCtrl
RoboMaster Linux 电控:异步 IO、设备驱动与机器人控制
|
异步上下文相关功能 更多...
异步上下文相关功能
电控代码目前被实现为 单线程异步 ,即整个逻辑异步运行在单线程中。它避免了多线程同时访问内存, 但协程仍会在 co_await 处交错,因此共享状态、对象生命周期和异步写操作仍需显式管理。
异步上下文被设计成一个单例类,可以通过 roboctrl::get<task_context>() 获取,这是因为目前应该不需要多个异步任务上下文。
类 | |
| class | task_context |
| 异步任务上下文类。 更多... | |
类型定义 | |
| template<typename T = void> | |
| using | awaitable = asio::awaitable< T > |
| 协程任务类型。 | |
| using | duration = std::chrono::steady_clock::duration |
函数 | |
| auto | spawn (task_context::task_type &&task) |
| 添加一个协程任务到全局任务上下文中执行。 | |
| template<typename ... Args> | |
| auto | post (Args &&... args) |
| 添加一个任务到全局任务上下文中执行。 | |
| void | run () |
| 运行全局任务上下文。 | |
| bool | failed () |
| 查询全局任务上下文是否因未处理异常进入过安全停机。 | |
| bool | shutdown_requested () |
| 查询全局任务上下文是否已经进入停机流程。 | |
| void | set_shutdown_handler (task_context::shutdown_handler_type handler) |
| 设置全局任务上下文的一次性安全停机任务。 | |
| void | request_shutdown () |
| 请求运行全局任务上下文的安全停机任务。 | |
| awaitable< void > | yield () |
| 协程任务等待。用于让出当前函数的执行权。 | |
| awaitable< void > | wait_for (const duration &duration) |
| 协程任务等待。 | |
| auto | executor () |
| 获取全局任务上下文的executor。 | |
| auto & | io_context () |
| 获取全局任务上下文的io_context。 | |
| void | stop () |
| using roboctrl::async::awaitable = typedef asio::awaitable<T> |
| using roboctrl::async::duration = typedef std::chrono::steady_clock::duration |
|
inline |
获取全局任务上下文的executor。
被这些函数引用 roboctrl::io::tcp::tcp() , 以及 roboctrl::io::udp::udp().
|
inline |
|
inline |
添加一个任务到全局任务上下文中执行。
| Args | 任务参数类型 |
| args | 任务参数 |
示例:
|
inline |
|
inline |
|
inline |
添加一个协程任务到全局任务上下文中执行。
| task | 任务 |
示例:
被这些函数引用 roboctrl::ctrl::robot::init(), roboctrl::callback< Args >::operator()(), roboctrl::io::can::start(), roboctrl::io::serial::start(), roboctrl::io::tcp::start(), roboctrl::io::tcp_server::start() , 以及 roboctrl::io::udp::start().
|
inline |
协程任务等待。
| duration | 等待时长 |
示例:
被这些函数引用 roboctrl::ctrl::robot::task(), roboctrl::ctrl::shoot::task() , 以及 roboctrl::device::dji_motor_group::task().