go - 如何每秒重复函数N次?

标签 go

Go中如何每秒重复N次函数?

我可以:

N := 30 //Repeat 30 times per second
for {
    //Do something
    time.Sleep(time.Second * time.Duration(N))
}

但这只是使重复之间的间隔

最佳答案

有两个选项,都不能保证每秒 x 次。

  • 将 N 设置为 1/30 而不是 30。因此 sleep 时间为 1/30 秒。
  • 有一个循环 30 次并执行你的“做某事”的内部 for 循环,然后在退出时你点击休眠一秒钟的语句。

选项一:

N := 30 //Repeat 30 times per second
for {
    //Do something
    time.Sleep(time.Duration(1e9 / N))  //time.second constant unnecessary (see kostya comments)
}

选项二:

N := 1  //Sleep duration of one second
for {
    for i := 1;  i<=30; i++ {
        //Do something
    }
    time.Sleep(time.Second * time.Duration(N))
}

请注意,在选项二中,所有事情都同时发生,然后您稍等片刻。第一个选项将隔开第二个选项。由于计算机的计时,这并不精确: sleep 不能保证它会在您期望的时候准确地醒来。

关于go - 如何每秒重复函数N次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31323118/

相关文章:

ssl - Go https 客户端问题 - 远程错误 : tls: handshake failure

sorting - 如何通过float64值对map [string] float64排序?

c - 尝试在 Windows 上使用 cuda

Go 函数类型作为接口(interface)值

arrays - 需要帮助存储在数组结构中

mongodb - 如何使用 mgo 将 int slice 传递给 "$in"

go - 使用 go 的 HTTP PUT 请求处理程序

rest - 在 gRPC 之上对 REST web 服务进行版本控制

mongodb - 使用 mgo 在 MongoDB 中插入数据

go - 最小正float64值