c++理解协程03

Posted 周三石

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++理解协程03相关的知识,希望对你有一定的参考价值。

展开后,如下:

  <型名...O>
忽略中 测试协程(O...o){
T=协程特征<返回类型,O...>;
承诺类型=T::承诺类型;
帧类型=元组<帧前缀,承诺类型,O...>;
*=(帧类型*)承诺类型::符号 (的大小(帧类型));
*p=的地址(<1>(*));
忽略中*__中对象;
*__中对象={p->取中对象()};
{
//协待 p->初始挂起();
&&=p->初始挂起();
(!.准备好协()){
__内置保存协程()//帧->挂起索引=n;
(.挂起协(<协程句柄>)){
__挂起内置协程()//跳
}
}

恢复标签n:
.恢复协();
}


{
//协待 实验性::总是挂起{};
{
&&=实验性::总是挂起{};
(!.准备好协()){//准备好
__内置保存协程()//帧->挂起索引=m;
(.挂起协(<协程句柄>)){//挂起
__挂起内置协程()//跳
}
}

恢复标签m:
p->中空(.恢复协());//恢复
//p->返回值(临.恢复协());
}


__止挂起点;
}(...){
p->未处理异常();
}

__止挂起点:
协待 p->止挂起();

__消灭点:
承诺类型::符号 (,的大小(帧类型));
}

协待表达式,就是协待(co_await)后的运算对象.

该运算对象,必须包含await_ready,await_suspend,await_resume(准备好,挂起,恢复)三个函数.如,前面的总是挂起如下:

   总是挂起{
准备好协()无异{
;
}

挂起协(协程句柄<>)无异{}

恢复协()无异{}
};//该表达式,三个必备函数.


以上是关于c++理解协程03的主要内容,如果未能解决你的问题,请参考以下文章

c++理解协程04

以下代码片段 C++ 的说明

c++理解协程05

如何理解这段代码片段中的两对括号?

从无栈协程到 C++异步框架

C++ 解释器/控制台/片段编译器