【问题标题】:Sleeping a process and waking it up休眠一个进程并唤醒它
【发布时间】:2013-10-17 13:57:22
【问题描述】:

我在 linux 嵌入式系统上使用 C 语言编写了一个小代码。我目前每 50 毫秒执行一次算法。

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

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

【问题讨论】:

    标签: c linux time signals


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      但是,以下技巧可能奏效:睡眠时间比预期的短,然后测量缺少的时间,然后调用另一个 nanosleep()。 这个想法是nanosleep() 在很短的时间间隔内可能使用忙等待。 但它仍然不能保证您能准确地获得所需的时间。

      如果您有非常严格的时序要求,您可能还想使用实时优先级。

      【讨论】:

        猜你喜欢
        • 2014-08-02
        • 2022-01-03
        • 2021-09-11
        • 1970-01-01
        • 2011-08-05
        • 2020-05-21
        • 2012-08-15
        • 1970-01-01
        • 2015-06-28
        相关资源
        最近更新 更多