我想每秒运行一个函数,例如 func() 恰好 1 次。然而 func() 的运行时间约为 500 毫秒。我怎样才能做到这一点?我知道如果函数的运行时间很短,我可以在每次执行后在 func() 和 sleep() 中编写一个 while 循环 1 秒。但是现在,运行时间很高。我应该怎么做才能确保 func() 每秒运行 1 次?谢谢。
问问题
259 次
2 回答
3
哟做:
- 在 start_time 中取当前时间。
- 执行你的工作
- 在 end_time 中取当前时间
- 等待(1 秒 + start_time - end_time)
这样,您可以每秒钟可靠地执行您的任务。如果任务花费的时间更少,您将等待更长的时间,反之亦然。但是请注意,这假设您的任务总是少于 1 秒。执行。在实际代码中,您想在 sleep 语句之前检查它。
实施细节取决于平台。
请注意,由于计算步骤 4 所需的时间,使用此方法仍会导致微小的漂移。更准确的替代方法是在 1 秒的整数倍上同步。这样一来,您就不会漂移超过 1000 次。
这取决于您需要的准确度。
于 2013-03-24T03:23:24.793 回答
1
如果你想要一个粗暴的、易于编码的解决方案,你可以在函数第一次运行之前获取时间并将其保存在某个变量(start_time)中。创建存储下一个重复编号的重复索引计数变量 (repeat_number)。然后你可以这样做:
1) next_run_time = ++repeat_number*1sec + start_time;
2) func();
3) wait_time = next_run_time - current_time;
4) sleep(wait_time)
5) goto 1;
这种方法禁止在每次迭代中累积时间误差。
但是对于真正的应用程序,您应该找到一些事件框架或库。
于 2013-03-24T03:29:01.957 回答