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)私も( beforeなしで)試しまし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

HTH

于 2012-10-11T10:17:47.173 に答える
0

タイマーを作成するには、struct sigactionを適切に設定する必要があります。

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

以前のコードでは、の代わりにsa_flagsに設定されていました。0SA_SIGINFO

More info on kernel.org

于 2012-10-11T10:49:02.607 に答える