
This commit adds support for time.NewTimer and time.NewTicker. It also adds support for the Stop() method on time.Timer, but doesn't (yet) add support for the Reset() method. The implementation has been carefully written so that programs that don't use these timers will normally not see an increase in RAM or binary size. None of the examples in the drivers repo change as a result of this commit. This comes at the cost of slightly more complex code and possibly slower execution of the timers when they are used.
36 строки
1 КиБ
Go
36 строки
1 КиБ
Go
//go:build !go1.18
|
|
// +build !go1.18
|
|
|
|
// Portions 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 runtime
|
|
|
|
type puintptr uintptr
|
|
|
|
// Package time knows the layout of this structure.
|
|
// If this struct changes, adjust ../time/sleep.go:/runtimeTimer.
|
|
type timer struct {
|
|
// If this timer is on a heap, which P's heap it is on.
|
|
// puintptr rather than *p to match uintptr in the versions
|
|
// of this struct defined in other packages.
|
|
pp puintptr
|
|
|
|
// Timer wakes up at when, and then at when+period, ... (period > 0 only)
|
|
// each time calling f(arg, now) in the timer goroutine, so f must be
|
|
// a well-behaved function and not block.
|
|
//
|
|
// when must be positive on an active timer.
|
|
when int64
|
|
period int64
|
|
f func(interface{}, uintptr)
|
|
arg interface{}
|
|
seq uintptr
|
|
|
|
// What to set the when field to in timerModifiedXX status.
|
|
nextwhen int64
|
|
|
|
// The status field holds one of the values below.
|
|
status uint32
|
|
}
|