-
Notifications
You must be signed in to change notification settings - Fork 10
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
co_yield #53
Comments
没有。这个东西是一种错误的设计,没有任何使用价值。 |
那怎么样才能让函数执行一半,下次执行的时候接着执行,而不是返回。这个的话再现在的框架里该怎么写。 |
看 示例代码啊。例子里的代码不都是执行一半然后继续执行的吗? |
#include <iostream>
#include "ucoro/awaitable.hpp"
ucoro::awaitable<int> C(int value){
co_return (value * 100);
}
ucoro::awaitable<void> B(int value){
auto comput_promise = C(value);
auto ret = co_await std::move(comput_promise);
std::cout << "return: " << ret << std::endl;
std::cout << "yied1: " << ret << std::endl;
std::cout << "yied2: " << ret << std::endl;
}
ucoro::awaitable<void> A(){
for (auto i = 0; i < 100; i+=2){
co_await B(i);
}
}
int main(int argc, char **argv){
coro_start(A(), str);
return 0;
} 就像这段代码示例里面,是A调用B,B调用C。在B里面调用C,是co_wait的形式等待C执行完再到B。也是执行到一半后面继续执行。我的想法是,A调用B的时候,第一次循环卡在B里面,譬如 |
首先,你这种需求就不应该使用协程。甚至根本不需要使用协程就能实现。 其实这种东西根本就不需要协程就能实现。就只需要写一个 operator() 加个 switch case 就好了。 协程解决的是另外的问题,就是 A 调用 B , 然后 B 退出了。并没有返回给 A 。 因为 B 把执行流程直接来个远程大跳转,跳去了 然后事件循环过了很久很久,终于从操作系统拿到了需要的东西,然后直接跳回 B 。 B 就这么被复活了。复活的时候还保留上一次死亡时候的全部状态。然后还顺便把 A 也复活了。 懂了吗? 这套流程,才是使用以前的 operator()() + switch case 模式下,非常难写的。这种流程,才有必要使用 c++20 的新语法糖。 |
谢谢,懂起了。 |
关闭的议题会被默认隐藏掉,这不是bug,所以没必要关掉它。开在这里让后面的人可以不用特意点已关闭的议题。 |
请问下这个里面有没得co_yield 这个东西
The text was updated successfully, but these errors were encountered: