如何在C++中从另一个协程调用协程?
How can I call a coroutine from another coroutine in C++?
我有一个很长的协程,我想把它分成更小的协程。就像常规函数一样,使代码更清晰。它的行为应该就像只有一个大的协程,所有较小的协程连续发生一样。
我正在使用#include <experimental/coroutine>
.
我一直在尝试这样的事情:
resumable part1_coroutine()
{
cout << "1" << endl;
co_await suspend_always();
}
resumable part2_coroutine()
{
cout << "2" << endl;
co_await suspend_always();
}
resumable main_coroutine()
{
cout << "main" << endl;
part1_coroutine();
part2_coroutine();
co_await suspend_always();
}
但似乎发生的事情是,part1_coroutine()
和part2_coroutine()
根本不会被执行。
这就是co_await foo()
的作用- 给另一个协程foo
一个取得进展的机会,根据需要暂停当前协程以等待它完成。 如果您只是调用协程但不等待它,则会丢弃对该项程的调用句柄,从而放弃调用。
令人惊讶的是,协程是不可行的。如标准中所述,协程只能通过与 awaitable(co_awaiting它们(交互来挂起。为了从另一个协程调用一个协程,必须将其设置为可等待的协程。因此,您必须在协程返回的对象上实现可等待的 API。因此,需要建造相当多的管道才能完成这项工作。
相关文章:
- 在另一个线程中调用luaL_error会引发qWarning
- join() 失败,如果在线程内部调用 io_context.run()
- QT 插槽未在主线程上调用
- 我应该在线程上调用 processEvents() 吗?
- 线程 std::调用未知类型,无法专门化函数错误
- 如何在JNI中从线程内部调用JAVA方法
- 在不同的线程中调用向量析构函数或清除
- 具有多线程支持的 RenderClass,将函数调用推送到向量以在另一个线程上调用
- 在线程中调用纯虚拟方法
- 终止处理程序在哪个线程中调用?
- C++线程中调用 std::terminate 时程序返回代码
- 在多个线程中调用 Py_Initialize()
- 在C 中的线程中调用类的方法
- 线程完成后在另一线程中调用方法
- 为什么我在C++线程函数调用中得到重复值?
- 在具体类的线程中调用的纯虚拟方法
- C++ - 在 main() 方法内的类实例中创建一个线程并调用 Sleep()
- 为什么即使在使用 Qt::D irectConnection 之后,接收器的线程中仍会调用插槽?如何确保在另一个线程中调用它?
- 在 std::thread 创建的线程中调用 pthread_sigmask 是一种好的做法吗?
- OpenCV 函数在由C++线程程序调用的 Python 脚本本身调用时锁定