itimerval计时器重新启动和停止

时间:2019-04-08 15:48:15

标签: c++ timer

我该如何停止计时器并为其赋予新的时间到期?

计时器结束后如何重新启动计时器?

如何从信号处理程序(handler_func)重新启动计时器?

示例:

struct sigaction real_sa;
struct itimerval real_timer;
real_sa.sa_handler = &handler_func;

if (sigaction(SIGALRM, &real_sa,NULL) < 0) {
    std::cerr << "system error: sigaction error\\n" <<
              std::endl;
    exit(1);
}
real_timer.it_value.tv_sec = (absolute_time/1000000);
real_timer.it_value.tv_usec = (absolute_time % 1000000);
if (setitimer (ITIMER_REAL, &real_timer, NULL))
{
    std::cerr << "system error: setitimer error\\n" <<
              std::endl;
    exit(1);
}

预先感谢

edit:此代码在linux环境下开发,应该可以在linux上工作(其他平台对我来说并不重要)

1 个答案:

答案 0 :(得分:0)

  

我该如何停止计时器并为其赋予新的时间到期?

通过用置零的setitimer调用it_value(在手册页中)。

  

计时器结束后如何重新启动计时器?

再次致电setitimer

  

如何从信号处理程序(handler_func)重新启动计时器?

不应该。它不能保证是异步信号安全的。您可以向线程发送消息以重新启动它。