POSIX计时器:参数无效

时间:2012-10-11 09:53:59

标签: c++ timer segmentation-fault posix

我正在尝试使用POSIX计时器,但我的代码无法运行。

timer_t id_timer_;

// some code. timer_create(), etc.

void timerPeriod (unsigned long sec, unsigned long nsec)
{
  struct itimerspec myperiod;
  myperiod.it_interval.tv_sec = sec;
  myperiod.it_interval.tv_nsec = nsec;
  myperiod.it_value.tv_sec = sec;
  myperiod.it_value.tv_nsec = nsec;

  if (timer_settime (&id_timer_, 0, &myperiod, 0))
    perror("timer_settime");
}

它返回timer_settime: Invalid argument,而参数对我来说很好。

我还尝试了timer_settime(id_timer_, 0, &myperiod, 0)(在id_timer_之前没有& ),我认为这是使用timer_settime()的好方法:分段错误..

有任何线索吗?

2 个答案:

答案 0 :(得分:0)

我假设前提条件是对timer_create的调用成功了吗?

根据timer_settime的手册页,如果timer_id无效,或者itimerspec参数为<,则可以获取EINVAL。 0或>百万。

http://linux.die.net/man/3/timer_settime

HTH

答案 1 :(得分:0)

为了创造时间,必须正确设置struct sigaction

struct sigaction sa;
sa.sa_flags = SA_SIGINFO;
sa.sa_sigaction = your_handler;

在我之前的代码中,sa_flags设置为0而不是SA_SIGINFO

有关kernel.org

的更多信息