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.
40 lines
927 B
40 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() |
|
}
|
|
|