0

我想每秒运行一个函数,例如 func() 恰好 1 次。然而 func() 的运行时间约为 500 毫秒。我怎样才能做到这一点?我知道如果函数的运行时间很短,我可以在每次执行后在 func() 和 sleep() 中编写一个 while 循环 1 秒。但是现在,运行时间很高。我应该怎么做才能确保 func() 每秒运行 1 次?谢谢。

4

2 回答 2

3

哟做:

  1. 在 start_time 中取当前时间。
  2. 执行你的工作
  3. 在 end_time 中取当前时间
  4. 等待(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 回答