睡觉过程并唤醒它

时间:2013-10-17 13:57:23

标签: c linux time signals

我在Linux嵌入式系统上有一个很小的C代码。我目前每50ms执行一次算法。

我被建议使用nanosleep,但它会使我的算法比每50毫秒执行一点点:timetorun(algorithm) + nanosleep(50ms)

所以我选择了警报选项,修改了一个volatile变量。要等待闹钟,我使用空忙循环。我不喜欢我采取的方法,我认为必须有更好的方法来做到这一点。有什么建议?也许是一种使用闹钟唤醒nanosleep()的方法?

2 个答案:

答案 0 :(得分:0)

如果可用,请使用timerfd。如果没有,请分叉第二个进程作为计时器。计时器以所需的间隔写入管道。无论哪种方式,您的进程都会阻塞对管道的读取,并在收到一个字节时开始执行。

答案 1 :(得分:0)

nanosleep()确保调用它的线程至少暂停指定的数量,而不是指定的数量。

nanosleep()暂停调用线程的执行,直到 至少经过* req中指定的时间,或者 传递触发处理程序调用的信号 调用线程或终止进程。

但是,以下技巧可能起作用:睡眠时间比预期的要短一些,然后测量丢失了多少时间,然后再呼叫另一个nanosleep()。 这个想法是nanosleep()在很短的时间间隔内 可能会使用忙等待。 仍然不能保证您能准确地得到所需的时间。

如果您对时间的要求非常严格,那么您可能还想使用实时优先级。