mirror of
https://github.com/duanhf2012/origin.git
synced 2026-02-04 06:54:45 +08:00
新增定时器重新开启功能
This commit is contained in:
@@ -8,6 +8,11 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func SetupTimer(timer *Timer) *Timer{
|
func SetupTimer(timer *Timer) *Timer{
|
||||||
|
if timer.rOpen == true {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
timer.rOpen = true
|
||||||
timerHeapLock.Lock() // 使用锁规避竞争条件
|
timerHeapLock.Lock() // 使用锁规避竞争条件
|
||||||
heap.Push(&timerHeap,timer)
|
heap.Push(&timerHeap,timer)
|
||||||
timerHeapLock.Unlock()
|
timerHeapLock.Unlock()
|
||||||
@@ -94,7 +99,7 @@ func tick() bool{
|
|||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
t.rOpen = false
|
||||||
t.C <- t
|
t.C <- t
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package timer
|
package timer
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
"runtime"
|
"runtime"
|
||||||
"sync"
|
"sync"
|
||||||
@@ -16,6 +17,7 @@ type Timer struct {
|
|||||||
fireTime time.Time // 触发时间
|
fireTime time.Time // 触发时间
|
||||||
cb func()
|
cb func()
|
||||||
AdditionData interface{} //定时器附加数据
|
AdditionData interface{} //定时器附加数据
|
||||||
|
rOpen bool //是否重新打开
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ticker
|
// Ticker
|
||||||
@@ -52,7 +54,7 @@ func newTimer(d time.Duration,c chan *Timer,cb func(),name string,additionData i
|
|||||||
timer.cb = cb
|
timer.cb = cb
|
||||||
timer.name = name
|
timer.name = name
|
||||||
timer.interval = d
|
timer.interval = d
|
||||||
|
timer.rOpen = false
|
||||||
return timer
|
return timer
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,9 +91,12 @@ func (t *Timer) Do(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Timer) SetupTimer(now time.Time){
|
func (t *Timer) SetupTimer(now time.Time) error{
|
||||||
t.fireTime = now.Add(t.interval)
|
t.fireTime = now.Add(t.interval)
|
||||||
SetupTimer(t)
|
if SetupTimer(t) == nil {
|
||||||
|
return fmt.Errorf("Failed to install timer.")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Timer) GetInterval() time.Duration{
|
func (t *Timer) GetInterval() time.Duration{
|
||||||
@@ -122,13 +127,18 @@ func (disp *Dispatcher) AfterFunc(d time.Duration, cb func(),onTimerClose OnTime
|
|||||||
funName := runtime.FuncForPC(reflect.ValueOf(cb).Pointer()).Name()
|
funName := runtime.FuncForPC(reflect.ValueOf(cb).Pointer()).Name()
|
||||||
timer := newTimer(d,disp.ChanTimer,cb,funName,nil)
|
timer := newTimer(d,disp.ChanTimer,cb,funName,nil)
|
||||||
cbFunc := func() {
|
cbFunc := func() {
|
||||||
onTimerClose(timer)
|
|
||||||
releaseTimer(timer)
|
|
||||||
if timer.IsActive() == false {
|
if timer.IsActive() == false {
|
||||||
|
onTimerClose(timer)
|
||||||
|
releaseTimer(timer)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
cb()
|
cb()
|
||||||
|
|
||||||
|
if timer.rOpen ==false {
|
||||||
|
onTimerClose(timer)
|
||||||
|
releaseTimer(timer)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
timer.cb = cbFunc
|
timer.cb = cbFunc
|
||||||
|
|||||||
Reference in New Issue
Block a user