c中不耗尽cpu的计时器

c中不耗尽cpu的计时器,c,timer,C,Timer,我根据网络上的一些示例编写了一个计时器: 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

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

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?

您可能想使用,这样您的程序就可以在无事可做时休眠并且不消耗cpu。一个简单的方法是使用

否则,在C语言中使用。

select()将执行您想要的操作。它的粒度为微秒。

您可以使用
pause()

大体上:

fun(i);
while(1)
    pause(); 
fun()
将每60秒执行一次fun

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


另一种方法是使用
sigssuspend()

您希望每60秒调用一次fun吗?您的问题最有可能出现在
while
循环中。发布描述情况所需的完整代码。函数本身很好。让我们看看你的主要产品!在main函数中,我只调用这个fun一次,然后在那里执行while循环:int main(){fun(0);while(1);}