You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
927 B

package neo
import (
"time"
)
type ticker struct {
time *Time
ch chan time.Time
id int
dur time.Duration
}
func (t *ticker) C() <-chan time.Time {
return t.ch
}
func (t *ticker) Stop() {
t.time.stop(t.id)
}
func (t *ticker) Reset(d time.Duration) {
t.time.reset(d, t.id, t.do, &t.dur)
}
// do is the ticker’s moment callback. It sends the now time to the underlying
// channel and plans a new moment for the next tick. Note that do runs under
// Time’s lock.
func (t *ticker) do(now time.Time) {
t.ch <- now
// It is safe to mutate ID without a lock since at most one moment
// exists for the given ticker and moments run under the Time’s lock.
t.time.resetUnlocked(t.dur, t.id, t.do, nil)
// Ticker used to create a new moment for each tick and that would close
// the observe channel. Maintain backwards compatibility for users that
// may rely on this behavior.
t.time.observeUnlocked()
}