From fd1386e1be54c47313be48f39e6506e03cc12aa4 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 24 May 2023 21:21:42 +0800 Subject: [PATCH] 1 --- server/robotserver/coroutine.cc | 13 +++++++++++++ server/robotserver/coroutine.h | 10 ++++++++++ 2 files changed, 23 insertions(+) diff --git a/server/robotserver/coroutine.cc b/server/robotserver/coroutine.cc index e5f7cb46..b67cc212 100644 --- a/server/robotserver/coroutine.cc +++ b/server/robotserver/coroutine.cc @@ -64,9 +64,17 @@ std::shared_ptr Coroutine::CoAwait(Awaiter& awaiter) std::shared_ptr Coroutine::CoAwait(Awaiter* awaiter) { CoSuspend(); + awaiter->Await + ( + [] () + { + + }); + CoYield(); while (!awaiter->Done()) { CoYield(); } + CoResume(); return awaiter->GetResult(); } @@ -91,3 +99,8 @@ void Coroutine::CallExit(boost::coroutines2::coroutine::push_type& sink) { sink_ = nullptr; } + +void Coroutine::Await(std::function cb) +{ + +} diff --git a/server/robotserver/coroutine.h b/server/robotserver/coroutine.h index 1c936436..02556207 100644 --- a/server/robotserver/coroutine.h +++ b/server/robotserver/coroutine.h @@ -32,10 +32,18 @@ class Awaiter return done_; } +protected: + + virtual void Await(std::function cb) + { + + } + private: bool done_ = false; std::shared_ptr results_; std::function cb_; + friend class Coroutine; }; class Promise : public Awaiter @@ -63,6 +71,8 @@ class Coroutine : public Awaiter, public std::enable_shared_from_this void CallEnter(boost::coroutines2::coroutine::push_type& sink); void CallExit(boost::coroutines2::coroutine::push_type& sink); + virtual void Await(std::function cb) override; + private: list_head co_entry_; list_head exec_entry_;