【发布时间】:2012-07-30 19:47:50
【问题描述】:
需要每 5 秒运行一次子程序,但在系统时钟标记处测量。因此,需要在每分钟 0、5、10、15.... 45、50、55 秒时开始它(确切地说,以 0.1 秒的精度)。
类似:
for(;;) {
do_sleep(); #time need to sleep to the next 5 second mark
run_this();
}
run_this sub 可以快也可以慢(它的运行时间在 0.2 - 120 秒之间)。当它运行超过 5 秒时 - 无论其运行时间如何,下一次运行都必须精确到 5 秒。
例如当run_this
- 在 11:11:12.3 结束需要等待 2.7 秒才能在 11:11:15 进行下一次运行
- 在 11:11:59.2 结束时只需等待 0.8 秒即可到下一个 11:12:00,依此类推...
问题是:do_sleep怎么写?
【问题讨论】:
-
如果
run_this()的运行时间超过五秒,则无法保证run_this()每五秒运行一次。无论如何,不在单个线程中...如果run_this()是线程安全的,那么您可以让一个线程每五秒触发一次run_this()。 -
我的意思是在潜艇结束后 5 秒内不要睡觉。因此,当运行时间为 53.2 秒时,休眠 1.8 秒到下一个 5 秒标记。
-
啊,好吧。在这种情况下,jm666 或 Jim Corbett 的答案都应该有效。
-
你在做什么需要这么精确?可能有更好的方式来协调工作。
-
run_this通过 USB 和微控制器做一些事情,细节只有我们的硬件人员知道.. ;(
标签: perl