GKD.RoboCtrl
载入中...
搜索中...
未找到
roboctrl::async 命名空间参考

异步上下文相关功能 更多...

详细描述

异步上下文相关功能

电控代码目前被实现为 单线程异步 ,即整个逻辑异步运行在单线程中。这样的优势是可以不用在意线程同步的问题,并且 使得涉及到 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< voidyield ()
 协程任务等待。用于让出当前函数的执行权。
 
awaitable< voidwait_for (const duration &duration)
 协程任务等待。
 
auto executor ()
 获取全局任务上下文的executor。
 
autoio_context ()
 获取全局任务上下文的io_context。
 
void stop ()
 

类型定义说明

◆ awaitable

template<typename T = void>
using roboctrl::async::awaitable = typedef asio::awaitable<T>

协程任务类型。

模板参数
T返回值类型

在文件 async.hpp42 行定义.

◆ duration

using roboctrl::async::duration = typedef std::chrono::steady_clock::duration

在文件 async.hpp44 行定义.

函数说明

◆ executor()

auto roboctrl::async::executor ( )
inline

获取全局任务上下文的executor。

在文件 async.hpp211 行定义.

被这些函数引用 roboctrl::io::tcp::tcp() , 以及 roboctrl::io::udp::udp().

◆ io_context()

auto & roboctrl::async::io_context ( )
inline

获取全局任务上下文的io_context。

在文件 async.hpp218 行定义.

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

◆ post()

template<typename ... Args>
auto roboctrl::async::post ( Args &&...  args)
inline

添加一个任务到全局任务上下文中执行。

模板参数
Args任务参数类型
参数
args任务参数

示例:

roboctrl::post([](int a,int b){std::print("{} + {} = {}\n",a,b,a+b);},1,2);
auto post(Args &&... args)
添加一个任务到全局任务上下文中执行。
Definition async.hpp:167
asio::awaitable< T > awaitable
协程任务类型。
Definition async.hpp:42

在文件 async.hpp167 行定义.

◆ run()

void roboctrl::async::run ( )
inline

运行全局任务上下文。

在文件 async.hpp176 行定义.

◆ spawn()

auto roboctrl::async::spawn ( task_context::task_type &&  task)
inline

添加一个协程任务到全局任务上下文中执行。

参数
task任务

示例:

auto spawn(task_context::task_type &&task)
添加一个协程任务到全局任务上下文中执行。
Definition async.hpp:151

在文件 async.hpp151 行定义.

被这些函数引用 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().

◆ stop()

void roboctrl::async::stop ( )
inline

在文件 async.hpp222 行定义.

◆ wait_for()

awaitable< void > roboctrl::async::wait_for ( const duration &  duration)
inline

协程任务等待。

参数
duration等待时长

示例:

co_await wait_for(1ms);
awaitable< void > wait_for(const duration &duration)
协程任务等待。
Definition async.hpp:202

在文件 async.hpp202 行定义.

被这些函数引用 roboctrl::ctrl::gimbal::task() , 以及 roboctrl::device::dji_motor_group::task().

◆ yield()

awaitable< void > roboctrl::async::yield ( )
inline

协程任务等待。用于让出当前函数的执行权。

示例:

co_await yield();
awaitable< void > yield()
协程任务等待。用于让出当前函数的执行权。
Definition async.hpp:188

在文件 async.hpp188 行定义.