如何在 Go 中每秒重复 N 次函数?
我可以:
N := 30 //Repeat 30 times per second
for {
//Do something
time.Sleep(time.Second * time.Duration(N))
}
Run Code Online (Sandbox Code Playgroud)
但这只是使重复之间的间隔
您可以使用 atime.Ticker来为您处理所有簿记工作。唯一的“问题”是,如果您的操作花费的时间比预期长,您将失去蜱虫(因此每秒运行的次数少于 N)。
func doSomething() {
const N = 30
ticker := time.NewTicker(time.Second / N)
for range ticker.C {
fmt.Println("Do anything that takes no longer than 1/Nth of a second")
}
}
Run Code Online (Sandbox Code Playgroud)
https://play.golang.org/p/Gq-tWMvxIk
有两种选择,都不能保证每秒 x 次。
30but 1/30。因此睡眠将持续 1/30 秒。选项一:
N := 30 //Repeat 30 times per second
for {
//Do something
time.Sleep(time.Duration(1e9 / N)) //time.second constant unnecessary (see kostya comments)
}
Run Code Online (Sandbox Code Playgroud)
选项二:
N := 1 //Sleep duration of one second
for {
for i := 1; i<=30; i++ {
//Do something
}
time.Sleep(time.Second * time.Duration(N))
}
Run Code Online (Sandbox Code Playgroud)
请注意,在选项二中,一切都同时发生,然后您等待一秒钟。第一个选项将隔开第二个选项。由于计算机中的时间安排,这将是不精确的:睡眠不能保证它会在您期望的时候准确地唤醒。
| 归档时间: |
|
| 查看次数: |
1271 次 |
| 最近记录: |