|
GKD.RoboCtrl
|
异步上下文相关功能 更多...
异步上下文相关功能
电控代码目前被实现为 单线程异步 ,即整个逻辑异步运行在单线程中。这样的优势是可以不用在意线程同步的问题,并且 使得涉及到 IO 的代码可以更加优雅。为了上手C++中的异步编程,你可以先看看Python中的异步编程是怎么样的。
异步上下文被设计成一个单例类,可以通过 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 () |
| 运行全局任务上下文。 | |
| 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> |
|
inline |
获取全局任务上下文的executor。
被这些函数引用 roboctrl::io::tcp::tcp() , 以及 roboctrl::io::udp::udp().
|
inline |
添加一个任务到全局任务上下文中执行。
| Args | 任务参数类型 |
| args | 任务参数 |
示例:
|
inline |
添加一个协程任务到全局任务上下文中执行。
| task | 任务 |
示例:
被这些函数引用 roboctrl::io::can::can(), roboctrl::device::dji_motor_group::dji_motor_group(), roboctrl::ctrl::gimbal::init(), roboctrl::callback< Args >::operator()(), roboctrl::io::tcp_server::task(), roboctrl::io::tcp::tcp() , 以及 roboctrl::io::udp::udp().
协程任务等待。
| duration | 等待时长 |
示例:
被这些函数引用 roboctrl::ctrl::gimbal::task() , 以及 roboctrl::device::dji_motor_group::task().