Open lailongwei opened 1 year ago
在LLBC_ThreadMgr/LLBC_Task重构后,内部使用LLBC_Task的地方并未跟随调整&简化,已有的内部使用逻辑:
LLBC_ThreadMgr
LLBC_Task
LLBC_LogRunnable
LLBC_XXXPoller
LLBC_PollerMonitor
需要作以下简化&bug fix:
简化:所有的Stop()逻辑可统一简化成如下:
void XXX::Stop() { stopping_ = true; // 设置标记为, Svc()方法内部将跳出loop Wait(); // 等待Task结束即可, 不再需要每个Task子类做独立且重复的_started标记位 }
Bug Fix:部分Task子类的Actative()跟Wait()调用线程不是同一个问题,需要统一解决,主要是在网络线程内部
LogRunnable支持任意线程Stop:在App-Crash后,signal handler线程不一定是初始化LoggerMgr的线程,所以需要进行特殊处理,代码如下:
void LLBC_LogRunnable::Stop() { LLBC_ReturnIf(GetTaskState() == LLBC_TaskState::NotActivated, void()); // Mask stopping and waiting for thread stopped. _stopping = true; LLBC_ReturnIf(Wait() == LLBC_OK, void()); // If Wait() call failed, maybe call LogRunnable::Stop() in difference thread(eg: in crash hook), // in this case, force waiting for LogRunnable thread stopped. while (GetTaskState() != LLBC_TaskState::NotActivated) LLBC_Sleep(10); }
在
LLBC_ThreadMgr
/LLBC_Task
重构后,内部使用LLBC_Task的地方并未跟随调整&简化,已有的内部使用逻辑:LLBC_LogRunnable
:日志线程LLBC_XXXPoller
:网络线程LLBC_PollerMonitor
:网络辅助线程需要作以下简化&bug fix:
简化:所有的Stop()逻辑可统一简化成如下:
Bug Fix:部分Task子类的Actative()跟Wait()调用线程不是同一个问题,需要统一解决,主要是在网络线程内部
LogRunnable支持任意线程Stop:在App-Crash后,signal handler线程不一定是初始化LoggerMgr的线程,所以需要进行特殊处理,代码如下: