37 lines
651 B
Go
37 lines
651 B
Go
package time
|
|
|
|
import "unsafe"
|
|
|
|
type Ticker struct {
|
|
C <-chan Time // The channel on which the ticks are delivered.
|
|
}
|
|
|
|
func NewTicker(d Duration) *Ticker {
|
|
if d <= 0 {
|
|
panic("non-positive interval for NewTicker")
|
|
}
|
|
c := make(chan Time, 1)
|
|
t := &Timer{C: c}
|
|
t.C = c
|
|
startTimer(&t.r)
|
|
return (*Ticker)(unsafe.Pointer(t))
|
|
}
|
|
|
|
func (t *Ticker) Stop() {
|
|
stopTimer(&(*Timer)(unsafe.Pointer(t)).r)
|
|
}
|
|
|
|
func (t *Ticker) Reset(d Duration) {
|
|
if d <= 0 {
|
|
panic("non-positive interval for Ticker.Reset")
|
|
}
|
|
resetTimer(&(*Timer)(unsafe.Pointer(t)).r, when(d))
|
|
}
|
|
|
|
func Tick(d Duration) <-chan Time {
|
|
if d <= 0 {
|
|
return nil
|
|
}
|
|
return NewTicker(d).C
|
|
}
|