1 // Copyright 2009 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
9 // A Ticker holds a channel that delivers `ticks' of a clock
12 C
<-chan Time
// The channel on which the ticks are delivered.
16 // NewTicker returns a new Ticker containing a channel that will send the
17 // time with a period specified by the duration argument.
18 // It adjusts the intervals or drops ticks to make up for slow receivers.
19 // The duration d must be greater than zero; if not, NewTicker will panic.
20 // Stop the ticker to release associated resources.
21 func NewTicker(d Duration
) *Ticker
{
23 panic(errors
.New("non-positive interval for NewTicker"))
25 // Give the channel a 1-element time buffer.
26 // If the client falls behind while reading, we drop ticks
27 // on the floor until the client catches up.
28 c
:= make(chan Time
, 1)
42 // Stop turns off a ticker. After Stop, no more ticks will be sent.
43 // Stop does not close the channel, to prevent a read from the channel succeeding
45 func (t
*Ticker
) Stop() {
49 // Tick is a convenience wrapper for NewTicker providing access to the ticking
50 // channel only. While Tick is useful for clients that have no need to shut down
51 // the Ticker, be aware that without a way to shut it down the underlying
52 // Ticker cannot be recovered by the garbage collector; it "leaks".
53 // Unlike NewTicker, Tick will return nil if d <= 0.
54 func Tick(d Duration
) <-chan Time
{