2 回答

TA贡献1806条经验 获得超5个赞
要用time.Reset什么?
重置将计时器更改为在持续时间 d 后到期。如果计时器已激活,则返回 true,如果计时器已过期或已停止,则返回 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)
}
}
}

TA贡献1803条经验 获得超6个赞
您可以使用timer.Reset函数来重置计时器。要更新它,请传递最初用作参数的相同持续时间。(在你的情况下10)
从包文档:
重置将计时器更改为在持续时间 d 后到期。如果计时器已激活,则返回 true,如果计时器已过期或已停止,则返回 false。
因此,当您将相同的持续时间传递给 时Reset,计时器将从该持续时间 d 开始计数。你有效地renew计时器。
例如:
if eventHappened {
timer.Reset(10)
}
- 2 回答
- 0 关注
- 237 浏览
添加回答
举报