我需要编写一个计时器,它可以将自身重置为零。例如,我有一个
trm := time.NewTimer(10)
然后,如果在过期之前发生了某些事情,计时器将清除其所有数据,并从 0 重新计算,就像我重新新建一个计时器一样。
我检查了Go的时间API,没有发现任何东西。有什么建议吗?
谢谢。
最佳答案
使用time.Reset
怎么样? ?
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.
另一个解决方案是初始化另一个计时器。
t.Reset(x)
t := time.NewTimer(x)
除了避免垃圾回收之外,其他都是相同的。
一个典型的例子如下。如果耗时小于超时时间,它将重置计时器。
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
const timeout = 1 * time.Millisecond
t := time.NewTimer(timeout)
for {
t2 := timeout + time.Duration(rand.Intn(100)-50)*timeout/100
start := time.Now()
select {
case <-time.After(t2):
fmt.Println("Time after:", t2)
}
elapsed := time.Since(start)
if elapsed < timeout {
fmt.Println("Time ellapsed:", elapsed)
t.Reset(timeout)
}
}
}
关于golang定时器从零开始重新计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36567456/