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);}