【问题标题】:How do I restart timer?如何重新启动计时器?
【发布时间】:2012-01-12 08:00:26
【问题描述】:

我使用以下代码设置闹钟。

struct itimerval timer;
struct sigaction sa;

sa.sa_handler = handler;
sa.sa_flags = SA_RESETHAND;
timer.it_value.tv_usec = 0;
timer.it_value.tv_sec = 1;
timer.it_interval.tv_sec = 0;
timer.it_interval.tv_usec = 0;
sigaction(SIGALRM, &sa, 0);
setitimer(ITIMER_REAL, &timer, 0); 

在定时器退出处理函数并进入下面的while循环后,如何重新启动定时器。我需要重新初始化所有内容还是只调用 setittimer?

while(pause() == -1)
{   
    // goes in here after handler function.. what needs to go here to restart timer?
}  

【问题讨论】:

    标签: c signals system-calls


    【解决方案1】:

    如果您使用SA_RESETHAND,您需要再次调用sigactionsetitimer。我建议你把它放在一个函数中,这样你就不必编写代码来启动(或重新启动)定时器两次或更多次了。

    【讨论】:

    • 你会推荐这个函数有所有的初始化属性还是简单的 sigaction 和 setittimer 调用?
    • @Lucas 也全部初始化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多