OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-dev/] [fsf-gcc-snapshot-1-mar-12/] [or1k-gcc/] [libgo/] [go/] [time/] [tick.go] - Blame information for rev 847

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 747 jeremybenn
// 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.
4
 
5
package time
6
 
7
import "errors"
8
 
9
// A Ticker holds a synchronous channel that delivers `ticks' of a clock
10
// at intervals.
11
type Ticker struct {
12
        C <-chan Time // The channel on which the ticks are delivered.
13
        r runtimeTimer
14
}
15
 
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
func NewTicker(d Duration) *Ticker {
21
        if d <= 0 {
22
                panic(errors.New("non-positive interval for NewTicker"))
23
        }
24
        // Give the channel a 1-element time buffer.
25
        // If the client falls behind while reading, we drop ticks
26
        // on the floor until the client catches up.
27
        c := make(chan Time, 1)
28
        t := &Ticker{
29
                C: c,
30
                r: runtimeTimer{
31
                        when:   nano() + int64(d),
32
                        period: int64(d),
33
                        f:      sendTime,
34
                        arg:    c,
35
                },
36
        }
37
        startTimer(&t.r)
38
        return t
39
}
40
 
41
// Stop turns off a ticker.  After Stop, no more ticks will be sent.
42
func (t *Ticker) Stop() {
43
        stopTimer(&t.r)
44
}
45
 
46
// Tick is a convenience wrapper for NewTicker providing access to the ticking
47
// channel only.  Useful for clients that have no need to shut down the ticker.
48
func Tick(d Duration) <-chan Time {
49
        if d <= 0 {
50
                return nil
51
        }
52
        return NewTicker(d).C
53
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.