From 8b113606e3268e08c672e4e4c002b97be6273519 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 11 Feb 2019 15:49:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dtimer=E6=B3=84=E6=BC=8F?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- a8/timer.cc | 31 ++++++++++++++++++++++++++++++- a8/timer.h | 1 + 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/a8/timer.cc b/a8/timer.cc index 232369a..0c78d6a 100644 --- a/a8/timer.cc +++ b/a8/timer.cc @@ -148,6 +148,9 @@ namespace a8 void Timer::UnInit() { + Clear(); + delete base_; + base_ = nullptr; } void Timer::Update() @@ -227,7 +230,7 @@ namespace a8 if (!list_empty(&timer->attach_entry)) { list_del_init(&timer->attach_entry); } - AddToFreeList(timer); + AddToFreeList(timer); } timer_list* Timer::GetTimerByAttach(list_head* attach_entry) @@ -332,6 +335,32 @@ namespace a8 base_->free_timer_num++; } + void Timer::Clear() + { + auto free_timers = + [] (list_head* head) + { + while (!list_empty(head)) { + struct timer_list *timer; + timer = list_first_entry(head, struct timer_list,entry); + DetachTimer(timer); + if (!list_empty(&timer->attach_entry)) { + list_del_init(&timer->attach_entry); + } + delete timer; + } + }; + for (int j = 0; j < TVN_SIZE; j++) { + free_timers(base_->tv5.vec + j); + free_timers(base_->tv4.vec + j); + free_timers(base_->tv3.vec + j); + free_timers(base_->tv2.vec + j); + } + for (int j = 0; j < TVR_SIZE; j++) { + free_timers(base_->tv1.vec + j); + } + } + void Timer::GC_TimerFunc(const a8::XParams& param) { Timer* timer = (Timer*)param.sender.GetUserData(); diff --git a/a8/timer.h b/a8/timer.h index 14c41b9..9695f2b 100644 --- a/a8/timer.h +++ b/a8/timer.h @@ -47,6 +47,7 @@ namespace a8 void UpdateTimer(); timer_list* NewTimerList(); void AddToFreeList(timer_list* timer); + void Clear(); static void GC_TimerFunc(const a8::XParams& param); private: