タイマーを開始し、有効期限が切れたときに呼び出される関数が必要です。
グーグルは、マニュアルの例を含む多くの例を見つけ、そのすべてがsigaction()
シグナルハンドラの設定に使用されます。
ただし、@Patryk は、この質問で次のように述べています 。
void cbf(union sigval);
struct sigevent sev;
timer_t timer;
sev.sigev_notify = SIGEV_THREAD;
sev.sigev_notify_function = cbf; //this function will be called when timer expires
sev.sigev_value.sival_ptr = (void*) arg;//this argument will be passed to cbf
timer_create(CLOCK_MONOTONIC, &sev, &timer);
これは、より短く、よりシンプルで、よりクリーンで、より保守しやすいものです...
何を与える?これは正しいです?それは単なるラッパーsigaction()
ですか?例で明示的にシグナル ハンドラーを設定するのはなぜですか?
また、このメソッドまたはシグナル ハンドラーのいずれかによってタイマーを開始した場合、タイマーtimer_settime
をキャンセルすると、システムがそのタイマーとコールバックの間の関連付けを削除することになりますか、それとも明示的に行う必要がありますか?
[更新]シグナルまたは以下の回答に示す方法のいずれかを選択できます(またはその両方ですが、ばかげているようです)。それは好みの問題です。Singals は、複雑さを犠牲にして、もう少し機能性を提供するかもしれません。
あなたがやりたいことがタイマーを開始し、それが期限切れになったときに通知を受けることだけなら、私の答えの方法は最も簡単です.