From 10c9ce7c681a24a44c37284239f504bd0264d4c9 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 18 May 2023 23:23:33 +0800 Subject: [PATCH] 1 --- server/robotserver/comgr.cc | 12 +++++++++--- server/robotserver/coroutine.cc | 10 +++++++--- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/server/robotserver/comgr.cc b/server/robotserver/comgr.cc index 3f5a6cba..93ff9ffb 100644 --- a/server/robotserver/comgr.cc +++ b/server/robotserver/comgr.cc @@ -12,14 +12,20 @@ void CoMgr::Init() [] (Coroutine* co) { a8::XPrintf("call 1\n", {}); - a8::XPrintf("call 2\n", {}); + for (int i = 0; i < 10; ++i) { + co->CoYield(); + a8::XPrintf("call A %d\n", {i}); + } }); CreateCo ( [] (Coroutine* co) { a8::XPrintf("call 10\n", {}); - a8::XPrintf("call 11\n", {}); + for (int i = 0; i < 10; ++i) { + co->CoYield(); + a8::XPrintf("call B %d\n", {i}); + } }); } @@ -31,7 +37,7 @@ void CoMgr::UnInit() void CoMgr::Update() { Coroutine *co = nullptr, *tmp = nullptr; - list_for_each_entry_safe(co, tmp, &co_list_, exec_entry_) { + list_for_each_entry_safe(co, tmp, &exec_list_, exec_entry_) { if (!co->Exec()) { co->hold_self_ = nullptr; } diff --git a/server/robotserver/coroutine.cc b/server/robotserver/coroutine.cc index b383dfc1..c98f1e60 100644 --- a/server/robotserver/coroutine.cc +++ b/server/robotserver/coroutine.cc @@ -7,7 +7,10 @@ Coroutine::Coroutine(std::function cb) { + INIT_LIST_HEAD(&co_entry_); INIT_LIST_HEAD(&exec_entry_); + list_add_tail(&co_entry_, &CoMgr::Instance()->co_list_); + Attach(); cb_ = cb; source_ = std::make_shared::pull_type> ( @@ -17,12 +20,13 @@ Coroutine::Coroutine(std::function cb) cb_(this); CallExit(sink); }); - list_add_tail(&co_entry_, &CoMgr::Instance()->co_list_); - Attach(); } Coroutine::~Coroutine() { + #ifdef DEBUG + a8::XPrintf("Coroutine::~Coroutine()\n", {}); + #endif Deatch(); list_del_init(&co_entry_); } @@ -69,7 +73,7 @@ void Coroutine::Attach() void Coroutine::Deatch() { - if (list_empty(&exec_entry_)) { + if (!list_empty(&exec_entry_)) { list_del_init(&exec_entry_); } }