c中的计时器不会耗尽cpu

时间:2011-11-09 15:23:34

标签: 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_REAL, &to, 0);
}

在main函数中,我只是称之为有趣一次,然后在那里做一个while循环。

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

3 个答案:

答案 0 :(得分:4)

你可能想要使用event loop,这样你的程序就会在没有任何事情的情况下休眠并且不消耗任何CPU。一种简单的方法是使用libevent

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

答案 1 :(得分:1)

您可以使用pause()link

主要:

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

fun()每60秒执行一次有趣的事情。

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

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

答案 2 :(得分:0)

C中的

select()会做你想要的。它的粒度为微秒级。