diff --git a/src/timer.rs b/src/timer.rs index 44eab73..7ba9538 100644 --- a/src/timer.rs +++ b/src/timer.rs @@ -176,7 +176,20 @@ impl Timer { (*v)(TimerEvent::Exec, None); } None => { - + } + } + match self.running_timer.upgrade() { + Some(v) => { + match v.borrow().timer_type { + TimerType::Timeout => { + //self.internalDelete + } + TimerType::Interval => { + //self.internalModify + } + } + } + None => { } } } @@ -231,6 +244,17 @@ impl Timer { return Rc::downgrade(&t.borrow().wp); } + fn internal_delete(&mut self, timer_wp: TimerWp, is_destory: bool) { + match timer_wp.upgrade() { + Some(v) => { + if Weak::ptr_eq(&self.running_timer, &Rc::downgrade(&v)) { + } + } + None => { + } + } + } + pub fn set_timeout(&mut self, time: i32, cb: TimerCb) -> TimerWp { return self.internal_add(TimerType::Timeout, time, cb, None); } @@ -264,7 +288,14 @@ impl Timer { pub fn is_running(&self) { } - pub fn delete(&mut self, _timer_wp: TimerWp) { + pub fn delete(&mut self, timer_wp: TimerWp) { + match timer_wp.upgrade() { + Some(v) => { + self.internal_delete(timer_wp, false); + } + None => { + } + } } pub fn reset(&mut self, _timer_wp: TimerWp) { @@ -281,7 +312,12 @@ impl Timer { fn gc_timer(&mut self, e: TimerEvent, _args: Option>>) { match e { TimerEvent::Exec => { - + while self.free_timer_num > self.cache_timer_num && + !self.free_timer_list.borrow().empty() { + let timer = &self.free_timer_list.borrow().first_entry(); + timer.upgrade().unwrap().borrow_mut().timer_entry.borrow_mut().del_init(); + self.free_timer_num -= 1; + } } TimerEvent::Custom(_v) => {