【问题标题】:timer in c that do not exhaust cpuc中的计时器不会耗尽cpu
【发布时间】:2011-11-09 15:23:34
【问题描述】:

我根据网上的一些例子写了一个计时器:

void fun(int i)
{
    struct itimerval to;

//do something

    signal(SIGALRM, fun);

    to.it_interval.tv_sec = 0;
    to.it_interval.tv_usec = 0;
    to.it_value.tv_sec = 60;
    to.it_value.tv_usec = 0;

    setitimer(ITIMER_REAL, &to, 0);
}

在 main 函数中,我只调用一次 fun,然后在其中执行一个 while 循环。

该程序表现良好,只是它完全耗尽了 cpu(99% 或 100%),但如果我删除 while 循环,“fun”函数只会被调用一次。我怎样才能保持它被定期调用,同时避免占用 100% 的 cpu?

【问题讨论】:

  • 您希望它每 60 秒调用一次 fun?
  • 您的问题很可能在您的while 循环中。发布描述情况所需的完整代码。
  • 函数本身没问题。向我们展示您的主要产品!
  • 在 main 函数中,我只调用一次 fun,然后在那里执行一个 while 循环: int main() { fun(0);而(1);}

标签: c timer


【解决方案1】:

您可能想要使用event loop,以便您的程序在无事可做时休眠并且不消耗CPU。一个简单的方法是使用libevent

否则,请使用select() or pselect()

【讨论】:

    【解决方案2】:

    您可以使用pause()link

    主要是:

    fun(i);
    while(1)
        pause(); 
    

    fun() 将每 60 秒执行一次 fun。

    sleep()Sleep() (windows) 也是你的朋友。 (在循环中而不是 pause())

    另一种方法是使用sigsuspend()link

    【讨论】:

      【解决方案3】:
      C 中的

      select() 会做你想做的事。并且是微秒级粒度的。

      【讨论】:

        猜你喜欢
        • 2010-09-15
        • 2021-02-10
        • 1970-01-01
        • 2014-11-27
        • 1970-01-01
        • 2017-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多