2 回答
TA贡献1860条经验 获得超9个赞
您可以延迟自动收报机的启动时间,使其接近 5 秒:
fiveSec := int64(5 * time.Second)
time.Sleep(time.Duration(fiveSec - (time.Now().UnixNano() % fiveSec)))
ticker := time.NewTicker(time.Second * 5)
或者使用 Time 方法获得正确延迟的另一种方法:
time.Sleep(time.Now().Truncate(5 * time.Second).Add(5 * time.Second).Sub(time.Now()))
TA贡献1848条经验 获得超2个赞
Ticker 将始终相对于您启动它的时间进行滴答。此外,如果您接收的速度不够快,可能会发生奇怪的事情。
我能立即想到的最好方法是计算下一个 5 秒间隔之前的持续时间,并用于time.After在那时获取信号。
const fiveSeconds = int64(5 * time.Second)
for i := 0; i < 2; i++ {
// get current offset from 5 second interval.
relativeTime := time.Now().UnixNano() % fiveSeconds
// get remaining time in current 5 second interval.
waitTime := fiveSeconds - relativeTime
// wait that long
ch := time.After(time.Duration(waitTime))
<-ch
fmt.Println(time.Now())
}
它可能与精确的 5 秒间隔有一点偏差,但如果你舍入它应该非常接近。
- 2 回答
- 0 关注
- 185 浏览
添加回答
举报