diff --git a/src/timer.rs b/src/timer.rs index 3e0be67..cb8fce2 100644 --- a/src/timer.rs +++ b/src/timer.rs @@ -75,33 +75,47 @@ impl Timer { get_tick_count: fn () -> i64, gctime: i32, cache_timer_num: i32) { - let init_timer_list = |tv: &mut [TimerListListHeadRp]| { - for i in 0..tv.len() { - tv[i] = crate::ListHead::::new_head(); - } - }; - self.get_tick_count = get_tick_count; self.cache_timer_num = cache_timer_num; self.free_timer_num = 0; self.work_list = crate::ListHead::::new_head(); - init_timer_list(&mut self.tv1); - init_timer_list(&mut self.tv2); + /*self.traverse_timer_list( + &mut |timer_list: &mut TimerListListHeadRp| { + timer_list = crate::ListHead::::new_head(); + });*/ + self.timer_tick = (self.get_tick_count)(); + { + let self_wp = self.shared_from_self(); + let cb = Box::new( + move |event: TimerEvent, args: Option>>| { + self_wp.borrow_mut().gc_timer(event, args); + } + ); + self.set_interval(gctime, cb); + } + } + + fn traverse_timer_list(&mut self, cb: Box::) { + let init_timer_list = |tv: &mut [TimerListListHeadRp]| { + for i in 0..tv.len() { + //(*cb)(&mut self.work_list); + //(*cb)(&mut tv[i]); + } + }; + (*cb)(&mut self.work_list); + /* + match &mut cb { + Some(v) => { + (*v)(&mut self.work_list); + } + None => { + } + }*/ + //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); - self.timer_tick = (self.get_tick_count)(); - let self_wp = self.shared_from_self(); - let cb = Box::new( - move |event: TimerEvent, args: Option>>| { - self_wp.borrow_mut().gc_timer(event, args); - } - ); - - self.set_interval( - gctime, - cb, - ); + init_timer_list(&mut self.tv5);*/ } fn shared_from_self(&self) -> Rc::> { @@ -120,7 +134,24 @@ impl Timer { } fn clear(&mut self) { - + let free_timer = |tv: &mut [TimerListListHeadRp]| { + for i in 0..tv.len() { + let head = &tv[i]; + while !head.borrow().empty() { + let timer = &head.borrow().first_entry().upgrade().unwrap(); + timer.borrow_mut().timer_entry.borrow_mut().del_init(); + if timer.borrow().attach_entry.borrow().empty() { + timer.borrow().attach_entry.borrow_mut().del_init(); + } + } + } + }; + //free_timer(&mut self.free_timer_list); + free_timer(&mut self.tv1); + free_timer(&mut self.tv2); + free_timer(&mut self.tv3); + free_timer(&mut self.tv4); + free_timer(&mut self.tv5); } fn new_timer_list(&mut self) -> Rc::> {