mirror of
https://github.com/golang/go
synced 2024-11-24 21:00:09 -07:00
time: split os-dependent part into sys.go.
R=rsc CC=golang-dev https://golang.org/cl/4259051
This commit is contained in:
parent
9442e9518d
commit
4c30ca067d
@ -8,6 +8,7 @@ TARG=time
|
||||
GOFILES=\
|
||||
format.go\
|
||||
sleep.go\
|
||||
sys.go\
|
||||
tick.go\
|
||||
time.go\
|
||||
|
||||
|
@ -5,7 +5,6 @@
|
||||
package time
|
||||
|
||||
import (
|
||||
"os"
|
||||
"syscall"
|
||||
"sync"
|
||||
"container/heap"
|
||||
@ -47,30 +46,6 @@ func init() {
|
||||
timers.Push(&Timer{t: forever}) // sentinel
|
||||
}
|
||||
|
||||
// Sleep pauses the current goroutine for at least ns nanoseconds.
|
||||
// Higher resolution sleeping may be provided by syscall.Nanosleep
|
||||
// on some operating systems.
|
||||
func Sleep(ns int64) os.Error {
|
||||
_, err := sleep(Nanoseconds(), ns)
|
||||
return err
|
||||
}
|
||||
|
||||
// sleep takes the current time and a duration,
|
||||
// pauses for at least ns nanoseconds, and
|
||||
// returns the current time and an error.
|
||||
func sleep(t, ns int64) (int64, os.Error) {
|
||||
// TODO(cw): use monotonic-time once it's available
|
||||
end := t + ns
|
||||
for t < end {
|
||||
errno := syscall.Sleep(end - t)
|
||||
if errno != 0 && errno != syscall.EINTR {
|
||||
return 0, os.NewSyscallError("sleep", errno)
|
||||
}
|
||||
t = Nanoseconds()
|
||||
}
|
||||
return t, nil
|
||||
}
|
||||
|
||||
// NewTimer creates a new Timer that will send
|
||||
// the current time on its channel after at least ns nanoseconds.
|
||||
func NewTimer(ns int64) *Timer {
|
||||
|
54
src/pkg/time/sys.go
Normal file
54
src/pkg/time/sys.go
Normal file
@ -0,0 +1,54 @@
|
||||
// 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 (
|
||||
"os"
|
||||
"syscall"
|
||||
)
|
||||
|
||||
// Seconds reports the number of seconds since the Unix epoch,
|
||||
// January 1, 1970 00:00:00 UTC.
|
||||
func Seconds() int64 {
|
||||
sec, _, err := os.Time()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return sec
|
||||
}
|
||||
|
||||
// Nanoseconds reports the number of nanoseconds since the Unix epoch,
|
||||
// January 1, 1970 00:00:00 UTC.
|
||||
func Nanoseconds() int64 {
|
||||
sec, nsec, err := os.Time()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return sec*1e9 + nsec
|
||||
}
|
||||
|
||||
// Sleep pauses the current goroutine for at least ns nanoseconds.
|
||||
// Higher resolution sleeping may be provided by syscall.Nanosleep
|
||||
// on some operating systems.
|
||||
func Sleep(ns int64) os.Error {
|
||||
_, err := sleep(Nanoseconds(), ns)
|
||||
return err
|
||||
}
|
||||
|
||||
// sleep takes the current time and a duration,
|
||||
// pauses for at least ns nanoseconds, and
|
||||
// returns the current time and an error.
|
||||
func sleep(t, ns int64) (int64, os.Error) {
|
||||
// TODO(cw): use monotonic-time once it's available
|
||||
end := t + ns
|
||||
for t < end {
|
||||
errno := syscall.Sleep(end - t)
|
||||
if errno != 0 && errno != syscall.EINTR {
|
||||
return 0, os.NewSyscallError("sleep", errno)
|
||||
}
|
||||
t = Nanoseconds()
|
||||
}
|
||||
return t, nil
|
||||
}
|
@ -6,30 +6,6 @@
|
||||
// displaying time.
|
||||
package time
|
||||
|
||||
import (
|
||||
"os"
|
||||
)
|
||||
|
||||
// Seconds reports the number of seconds since the Unix epoch,
|
||||
// January 1, 1970 00:00:00 UTC.
|
||||
func Seconds() int64 {
|
||||
sec, _, err := os.Time()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return sec
|
||||
}
|
||||
|
||||
// Nanoseconds reports the number of nanoseconds since the Unix epoch,
|
||||
// January 1, 1970 00:00:00 UTC.
|
||||
func Nanoseconds() int64 {
|
||||
sec, nsec, err := os.Time()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return sec*1e9 + nsec
|
||||
}
|
||||
|
||||
// Days of the week.
|
||||
const (
|
||||
Sunday = iota
|
||||
|
Loading…
Reference in New Issue
Block a user