有一个函数叫做 test(),我想每 30 秒调用一次这个函数,请找到我实现的代码片段。
void init_sigaction(void) {
struct sigaction act;
act.sa_handler = test; //test()
act.sa_flags = 0;
sigemptyset(&act.sa_mask);
sigaction(SIGPROF, &act, NULL);
}
void init_time(void) {
struct itimerval val;
val.it_value.tv_sec = 30; //Timer 30 Seconds
val.it_value.tv_usec = 0;
val.it_interval = val.it_value;
setitimer(ITIMER_PROF, &val, NULL);
}
int main()
{
/*Set the handler for the signal SIG to HANDLER */
signal(SIGINT, signal_handler);
init_sigaction();
init_time();
Some_other_function();
}
现在我正在使用一些其他函数,我想暂停 sigaction 计时器直到其他函数执行。如何实现暂停中断?
谢谢,
来自manual page setitimer
:
A timer which is set to zero (it_value is zero or the timer expires and it_interval is zero) stops.
使用零次调用 setitimer
,并使用有效的 old_value
参数来存储计时器的当前值,以便稍后再次启动它。
编辑:
这样的事情怎么样:
struct itimerval old_timer;
void pause_timer()
{
struct itimerval zero_timer = { 0 };
setitimer(ITIMER_PROF, &zero_time, &old_timer);
}
void resume_timer()
{
setitimer(ITIMER_PROF, &old_timer, NULL);
}
注意以上代码未经测试,仅通过阅读手册页进行编码。
我是一名优秀的程序员,十分优秀!