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
Sleep pauses the current goroutine for at least the duration d. A negative or zero duration causes Sleep to return immediately.
func ( Duration)
Interface to timers implemented in package runtime. Must be in sync with ../runtime/time.go:/^type timer
type runtimeTimer struct {
	pp       uintptr
	when     int64
	period   int64
	f        func(interface{}, uintptr) // NOTE: must not be closure
	arg      interface{}
	seq      uintptr
	nextwhen int64
	status   uint32
}
when is a helper function for setting the 'when' field of a runtimeTimer. It returns what the time will be, in nanoseconds, Duration d in the future. If d is negative, it is ignored. If the returned value would be less than zero because of an overflow, MaxInt64 is returned.
func ( Duration) int64 {
	if  <= 0 {
		return runtimeNano()
	}
	 := runtimeNano() + int64()
N.B. runtimeNano() and d are always positive, so addition (including overflow) will never result in t == 0.
		 = 1<<63 - 1 // math.MaxInt64
	}
	return 
}

func (*runtimeTimer)
func (*runtimeTimer) bool
func (*runtimeTimer, int64) bool
func ( *runtimeTimer, ,  int64,  func(interface{}, uintptr),  interface{},  uintptr)
The Timer type represents a single event. When the Timer expires, the current time will be sent on C, unless the Timer was created by AfterFunc. A Timer must be created with NewTimer or AfterFunc.
type Timer struct {
	C <-chan Time
	r runtimeTimer
}
Stop prevents the Timer from firing. It returns true if the call stops the timer, false if the timer has already expired or been stopped. Stop does not close the channel, to prevent a read from the channel succeeding incorrectly. To ensure the channel is empty after a call to Stop, check the return value and drain the channel. For example, assuming the program has not received from t.C already: if !t.Stop() { <-t.C } This cannot be done concurrent to other receives from the Timer's channel or other calls to the Timer's Stop method. For a timer created with AfterFunc(d, f), if t.Stop returns false, then the timer has already expired and the function f has been started in its own goroutine; Stop does not wait for f to complete before returning. If the caller needs to know whether f is completed, it must coordinate with f explicitly.
func ( *Timer) () bool {
	if .r.f == nil {
		panic("time: Stop called on uninitialized Timer")
	}
	return stopTimer(&.r)
}
NewTimer creates a new Timer that will send the current time on its channel after at least duration d.
func ( Duration) *Timer {
	 := make(chan Time, 1)
	 := &Timer{
		C: ,
		r: runtimeTimer{
			when: when(),
			f:    sendTime,
			arg:  ,
		},
	}
	startTimer(&.r)
	return 
}
Reset changes the timer to expire after duration d. It returns true if the timer had been active, false if the timer had expired or been stopped. For a Timer created with NewTimer, Reset should be invoked only on stopped or expired timers with drained channels. If a program has already received a value from t.C, the timer is known to have expired and the channel drained, so t.Reset can be used directly. If a program has not yet received a value from t.C, however, the timer must be stopped and—if Stop reports that the timer expired before being stopped—the channel explicitly drained: if !t.Stop() { <-t.C } t.Reset(d) This should not be done concurrent to other receives from the Timer's channel. Note that it is not possible to use Reset's return value correctly, as there is a race condition between draining the channel and the new timer expiring. Reset should always be invoked on stopped or expired channels, as described above. The return value exists to preserve compatibility with existing programs. For a Timer created with AfterFunc(d, f), Reset either reschedules when f will run, in which case Reset returns true, or schedules f to run again, in which case it returns false. When Reset returns false, Reset neither waits for the prior f to complete before returning nor does it guarantee that the subsequent goroutine running f does not run concurrently with the prior one. If the caller needs to know whether the prior execution of f is completed, it must coordinate with f explicitly.
func ( *Timer) ( Duration) bool {
	if .r.f == nil {
		panic("time: Reset called on uninitialized Timer")
	}
	 := when()
	return resetTimer(&.r, )
}

Non-blocking send of time on c. Used in NewTimer, it cannot block anyway (buffer). Used in NewTicker, dropping sends on the floor is the desired behavior when the reader gets behind, because the sends are periodic.
	select {
	case .(chan Time) <- Now():
	default:
	}
}
After waits for the duration to elapse and then sends the current time on the returned channel. It is equivalent to NewTimer(d).C. The underlying Timer is not recovered by the garbage collector until the timer fires. If efficiency is a concern, use NewTimer instead and call Timer.Stop if the timer is no longer needed.
func ( Duration) <-chan Time {
	return NewTimer().C
}
AfterFunc waits for the duration to elapse and then calls f in its own goroutine. It returns a Timer that can be used to cancel the call using its Stop method.
func ( Duration,  func()) *Timer {
	 := &Timer{
		r: runtimeTimer{
			when: when(),
			f:    goFunc,
			arg:  ,
		},
	}
	startTimer(&.r)
	return 
}

func ( interface{},  uintptr) {
	go .(func())()