我按照网上的一些例子写了一个计时器:
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?
答案 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)
select()会做你想要的。它的粒度为微秒级。