llbc
llbc copied to clipboard
【llbc】整体简化llbc内部使用Task的逻辑
在LLBC_ThreadMgr
/LLBC_Task
重构后,内部使用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);
}