如何立即在c中启动计时器

时间:2017-07-21 07:04:43

标签: c linux timer

计时器在一段时间后启动。 为了调用第一个计时器处理程序,我必须等待最小的timer.it_value.tv_sec秒。 我希望我的时间处理程序在setitimer函数后立即被调用。

如果我设置timer.it_value.tv_sec = 0,则计时器停止。

我试图使用计时器实现on-off机制。

timer.it_value.tv_sec = 0; // If I do this timer stops
timer.it_value.tv_usec = 0;
timer.it_interval.tv_sec = 2;
timer.it_interval.tv_usec = 0;
setitimer (ITIMER_REAL, &timer, NULL);

所以为了立即执行,我设置了timer.it_value.tv_usec = 1, 但是如下所示它需要1次使用延迟。

timer.it_value.tv_sec = 0; 
timer.it_value.tv_usec = 1;// Here it is
timer.it_interval.tv_sec = 2;
timer.it_interval.tv_usec = 0;
setitimer (ITIMER_REAL, &timer, NULL);

还有其他方式吗?

1 个答案:

答案 0 :(得分:1)

如果你想每两秒激活一次定时器(初始情况除外),只需将其设置为两秒钟,但在启动计时器之前立即提升信号,如:

#include <signal.h>

timer.it_interval.tv_sec = 2;
timer.it_interval.tv_usec = 0;
raise(SIGALRM);
setitimer (ITIMER_REAL, &timer, NULL);

毕竟,提升SIGALRMsetitimer (ITIMER_REAL, ...)在计时器到期时会做的事情。