This commit is contained in:
aozhiwei 2023-10-19 22:06:46 +08:00
parent 389f5a06ce
commit 746fe5b87c

View File

@ -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::<TimerList>::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::<TimerList>::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::<TimerList>::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<Vec<Rc::<dyn Any>>>| {
self_wp.borrow_mut().gc_timer(event, args);
}
);
self.set_interval(gctime, cb);
}
}
fn traverse_timer_list(&mut self, cb: Box::<dyn FnMut (&mut TimerListListHeadRp)>) {
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<Vec<Rc::<dyn Any>>>| {
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::<RefCell::<Timer>> {
@ -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::<RefCell::<TimerList>> {