diff options
Diffstat (limited to 'src/lib/time/tick.go')
-rw-r--r-- | src/lib/time/tick.go | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/lib/time/tick.go b/src/lib/time/tick.go new file mode 100644 index 000000000..efd5ceb25 --- /dev/null +++ b/src/lib/time/tick.go @@ -0,0 +1,42 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package time + +import ( + "syscall"; + "time" +) + +// TODO(rsc): This implementation of time.Tick is a +// simple placeholder. Eventually, there will need to be +// a single central time server no matter how many tickers +// are active. There also needs to be a way to cancel a ticker. +// +// Also, if timeouts become part of the select statement, +// perhaps the Ticker is just: +// +// func Ticker(ns int64, c *chan int64) { +// for { +// select { timeout ns: } +// nsec, err := time.Nanoseconds(); +// c <- nsec; +// } + +func Ticker(ns int64, c *chan int64) { + var tv syscall.Timeval; + for { + syscall.nstotimeval(ns, &tv); + syscall.Syscall6(syscall.SYS_SELECT, 0, 0, 0, 0, syscall.TimevalPtr(&tv), 0); + nsec, err := time.Nanoseconds(); + c <- nsec; + } +} + +export func Tick(ns int64) *chan int64 { + c := new(chan int64); + go Ticker(ns, c); + return c; +} + |