Go 戈朗计时器从零开始重新计算
我需要写一个计时器,它可能会自动重置为零。例如,我有一个Go 戈朗计时器从零开始重新计算,go,timer,Go,Timer,我需要写一个计时器,它可能会自动重置为零。例如,我有一个 trm := time.NewTimer(10) 然后,如果某个事件在过期之前发生,计时器将清除它拥有的所有数据,并从0开始重新计算,就像我重新创建同一个计时器一样 我检查了Go的时间API,没有发现任何东西。有什么建议吗 谢谢。您可以使用定时器.复位功能来复位定时器。若要续订,请传递最初用作参数的相同持续时间。(在您的情况下10) 从软件包文档: 重置会将计时器更改为在持续时间d后过期。如果计时器处于活动状态,则返回true;如果计时
trm := time.NewTimer(10)
然后,如果某个事件在过期之前发生,计时器将清除它拥有的所有数据,并从0开始重新计算,就像我重新创建同一个计时器一样
我检查了Go的时间API,没有发现任何东西。有什么建议吗
谢谢。您可以使用
定时器.复位功能来复位定时器。若要续订,请传递最初用作参数的相同持续时间。(在您的情况下10
)
从软件包文档:
重置会将计时器更改为在持续时间d后过期。如果计时器处于活动状态,则返回true;如果计时器已过期或已停止,则返回false
因此,当您将相同的持续时间传递给重置
时,计时器将从该持续时间d开始计数。您可以有效地更新计时器
例如:
if eventHappened {
timer.Reset(10)
}
你打算用什么
重置会将计时器更改为在持续时间d后过期。如果
计时器已激活,如果计时器已过期或已关闭,则为false
停下来
另一个解决方案是初始化另一个计时器
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)
}
}
}
主程序包
进口(
“fmt”
“数学/兰德”
“时间”
)
func main(){
常数超时=1*时间。毫秒
t:=时间。新计时器(超时)
为了{
t2:=超时+时间持续时间(rand.Intn(100)-50)*超时/100
开始:=时间。现在()
挑选{
案例什么意思,你检查了go API,什么也没找到?如果你搜索“golang timer”,第一个结果是golang的时间包的官方标准库文档。timer
类型只有两种方法,其中一种是Reset
。这不是你想要的吗?我不确定Reset()将从0开始,或继续计时。@我已更新答案,以解决您的问题。