然后会根据是否有对可等待体的operator co_await重载来生成一个等待器(awaiter) 。
auto initial_suspend() { returnstd::experimental::suspend_always{}; } auto final_suspend() noexcept { return final_awaiter(); } void unhandled_exception() { std::terminate(); } }; using handle_type = std::experimental::coroutine_handle<promise_type>; handle_type coro; MyFuture(handle_t...
public: }; auto Event::operator co_await() { return Awaitable{this}; } void Event::trigger() { triggered = true; std::cout << "resuming " << awaitables.size() << " awaitable(s)\n"; for(auto&& a : std::move(awaitables)) a->awaiter.resume(); } 在gcc中编译并运行它显示...
void Awaiter::await_suspend(std::coroutine_handle<> h) { if (hp_) { *hp_ = h; hp_ = nullptr; } } await_read Awaiter还有另外两种方法。这些方法是语言所要求的。 await_ready是一种优化。如果返回 true,则co_await不会暂停该函数。比如说我将return false改成return true。这个例子的协程就不...
struct _Future_awaiter { future<_Ty>& _Fut; bool await_ready() const { return _Fut._Is_ready(); } void await_suspend( experimental::coroutine_handle<> _ResumeCb) { // TRANSITION, change to .then if and when future gets .then ...
We learned that this error message means that we ended up awaiting something that can’t be awaited. We were hoping that theoperator co_awaitwould convert the10sinto an awaiter, but it didn’t work. As a result, we ended up using thestd::chrono::secondsas its own awaiter, but since...
c++ 在没有同步的情况下,co_await和恢复另一个线程上的协程安全吗?是的,它是安全的。std::jthread...
这是GCC中协程实现中的一个编译器错误,因为当前的标准草案中没有任何内容禁止await_resume的自定义/复合...
awaitable) ,然后会根据是否有对可等待体的operator co_await重载来生成一个等待器(awaiter) 。
structProcessUnit{intresult;Coro<void>::Handlerh;};structPromiseType{voidreturn_value(intret){unit.result=ret;}structfinal_awaiter{boolawait_ready()noexcept{returnfalse;}voidawait_suspend(Handlerh)noexcept{h.promise().unit.h.resume();}voidawait_resume()noexcept{}};final_awaiterfinal_suspend()...