diff --git a/src/timer.rs b/src/timer.rs index 6b2ceee..f246698 100644 --- a/src/timer.rs +++ b/src/timer.rs @@ -78,7 +78,7 @@ impl Timer { self.get_tick_count = get_tick_count; self.cache_timer_num = cache_timer_num; self.free_timer_num = 0; - self.traverse_timer_list( + self.mut_traverse_timer_list( &mut |timer_list: &mut TimerListListHeadRp| { *timer_list = crate::ListHead::::new_head(); }); @@ -94,18 +94,32 @@ impl Timer { } } - fn traverse_timer_list(&mut self, cb: &mut dyn FnMut (&mut TimerListListHeadRp)) { + fn traverse_timer_list(&self, cb: &mut dyn FnMut (&TimerListListHeadRp)) { + (*cb)(&self.work_list); + let mut for_each_cb = |tv: &[TimerListListHeadRp]| { + for i in 0..tv.len() { + (*cb)(&tv[i]); + } + }; + for_each_cb(&self.tv1); + for_each_cb(&self.tv2); + for_each_cb(&self.tv3); + for_each_cb(&self.tv4); + for_each_cb(&self.tv5); + } + + fn mut_traverse_timer_list(&mut self, cb: &mut dyn FnMut (&mut TimerListListHeadRp)) { (*cb)(&mut self.work_list); - let mut init_timer_list = |tv: &mut [TimerListListHeadRp]| { + let mut for_each_cb = |tv: &mut [TimerListListHeadRp]| { for i in 0..tv.len() { (*cb)(&mut tv[i]); } }; - init_timer_list(&mut self.tv1); - init_timer_list(&mut self.tv2); - init_timer_list(&mut self.tv3); - init_timer_list(&mut self.tv4); - init_timer_list(&mut self.tv5); + for_each_cb(&mut self.tv1); + for_each_cb(&mut self.tv2); + for_each_cb(&mut self.tv3); + for_each_cb(&mut self.tv4); + for_each_cb(&mut self.tv5); } fn shared_from_self(&self) -> Rc::> { @@ -124,17 +138,17 @@ impl Timer { } fn clear(&mut self) { - let free_timer = |head: &mut TimerListListHeadRp| { + let free_timer = |head: &TimerListListHeadRp| { while !head.borrow().empty() { let timer = &head.borrow().first_entry().upgrade().unwrap(); - timer.borrow_mut().timer_entry.borrow_mut().del_init(); + //self.detach_timer(timer); if timer.borrow().attach_entry.borrow().empty() { timer.borrow().attach_entry.borrow_mut().del_init(); } } }; self.traverse_timer_list( - &mut |timer_list: &mut TimerListListHeadRp| { + &mut |timer_list: &TimerListListHeadRp| { free_timer(timer_list); }); } @@ -387,9 +401,9 @@ impl Timer { } } - fn detach_timer(&mut self, timer: &Rc::>) { + fn detach_timer(&self, timer: &Rc::>) { if !timer.borrow().timer_entry.borrow().empty() { - + timer.borrow().timer_entry.borrow_mut().del_init() } }