You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
732 B
Go
50 lines
732 B
Go
//icomsys callback timer
|
|
package icscbtimer
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
type IcsCBTimerFunc func(t *IcsCBTimer)
|
|
|
|
type IcsCBTimer struct {
|
|
ticker *time.Ticker
|
|
d time.Duration
|
|
cbfunc IcsCBTimerFunc
|
|
STOP chan bool
|
|
}
|
|
|
|
func NewCBTimer(d time.Duration, callbackfunc IcsCBTimerFunc) *IcsCBTimer {
|
|
if d <= 0 || callbackfunc == nil {
|
|
return nil
|
|
}
|
|
|
|
it := IcsCBTimer{d: d, cbfunc: callbackfunc}
|
|
|
|
return &it
|
|
}
|
|
|
|
func (t IcsCBTimer) GetTick() <-chan time.Time {
|
|
return t.ticker.C
|
|
}
|
|
|
|
func (t *IcsCBTimer) Start() {
|
|
if t == nil {
|
|
return
|
|
}
|
|
|
|
t.ticker = time.NewTicker(t.d)
|
|
t.STOP = make(chan bool, 1)
|
|
|
|
go t.cbfunc(t)
|
|
}
|
|
|
|
func (t *IcsCBTimer) Stop() {
|
|
if t == nil || t.ticker == nil {
|
|
return
|
|
}
|
|
|
|
t.STOP <- true
|
|
t.ticker.Stop()
|
|
}
|