Golang 定时器 time.Sleep() 代码修复:确保最小延迟时间
在给定的代码中,存在一个潜在的bug。当averageDuration的计算结果小于1毫秒时,将会得到0的结果,这将导致time.Sleep()函数不会暂停任何时间。\n\n为了修复这个问题,可以在计算averageDuration时,使用math.Ceil()函数将其向上舍入到最接近的整数值。这样可以确保averageDuration至少为1毫秒。\n\n以下是修复后的代码:\n\ngo\npackage main\n\nimport (\n "fmt"\n "math"\n "time"\n)\n\nfunc main() {\n totalFrames := 100 // 数据帧总长度\n totalDuration := 10 // 数据总时长(秒)\n\n averageDuration := math.Ceil(float64(totalDuration) / float64(totalFrames) * 1000) // 平均每帧的时长(毫秒)\n\n for i := 0; i < totalFrames; i++ {\n startTime := time.Now()\n\n // 模拟发送数据操作\n sendData()\n\n elapsedTime := time.Since(startTime)\n\n sleepDuration := time.Duration(averageDuration - float64(elapsedTime.Milliseconds())) * time.Millisecond\n\n time.Sleep(sleepDuration)\n }\n}\n\nfunc sendData() {\n // 模拟发送数据操作\n fmt.Println("Sending data...")\n}\n\n\n现在,即使averageDuration小于1毫秒,代码也能够正确地进行延迟。
原文地址: https://www.cveoy.top/t/topic/p0Bm 著作权归作者所有。请勿转载和采集!