0

我正在尝试使用 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():分段错误......

有什么线索吗?

4

2 回答 2

0

我假设这样做的前提是对 timer_create 的调用成功?

根据 timer_settime 的手册页,如果 timer_id 无效,或者如果 itimerspec 参数 < 0 或 > 100 万,您可以获得 EINVAL。

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

高温高压

于 2012-10-11T10:17:47.173 回答
0

为了创建计时器,struct sigaction必须正确设置。

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

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

有关kernel.org的更多信息

于 2012-10-11T10:49:02.607 回答