2017-07-21 9 views
0

タイマーは一定期間後に開始します。 最初のタイマーハンドラが呼び出されるためには、少なくともtimer.it_value.tv_sec秒待たなければなりません。 私はsetitimer関数の直後に呼び出されるようにしたい。すぐにタイマーを開始するには

timer.it_value.tv_sec = 0に設定すると、タイマーが停止します。

タイマーを使用してオン/オフメカニズムを実装しようとしています。

timer.it_value.tv_sec = 0; // If I do this timer stops 
timer.it_value.tv_usec = 0; 
timer.it_interval.tv_sec = 2; 
timer.it_interval.tv_usec = 0; 
setitimer (ITIMER_REAL, &timer, NULL); 

だから、すぐに実行するために、私は 、1 = timer.it_value.tv_usecを設定しているが、それは以下のように1マイクロ秒の遅延がかかります。

timer.it_value.tv_sec = 0; 
timer.it_value.tv_usec = 1;// Here it is 
timer.it_interval.tv_sec = 2; 
timer.it_interval.tv_usec = 0; 
setitimer (ITIMER_REAL, &timer, NULL); 

他の方法はありますか?あなたは2秒ごとに最初の場合を除き、タイマーを有効にする場合

+1

'it_value.tv_sec'を必要な秒数に設定してから、*明示的に*タイマーハンドラ関数を呼び出すのはなぜですか?タイマハンドラ関数を明示的に呼び出すことは、タイマが経過したことと同じです。 –

+0

ええと^^^^なぜそれを呼び出さないのですか? –

答えて

1

、あなたはタイマーを開始する前にわずか2秒のためにそれを設定したが、すぐに信号を上げ、何かのように:

#include <signal.h> 

timer.it_interval.tv_sec = 2; 
timer.it_interval.tv_usec = 0; 
raise(SIGALRM); 
setitimer (ITIMER_REAL, &timer, NULL); 

SIGALRMを上げます結局のところ、setitimer (ITIMER_REAL, ...)はタイマーの期限が切れたときに何をしますか?

関連する問題