では動作しません。私はこのコードを実行しようとしている:アラーム(int)がwhileループ
signal(SIGALRM,handler);
alarm(1);
while(1){}
handler
機能は、単に「test」を出力します。
alarm(1)
この場合、最終的に1回だけ実行されます。私はループに入れようとしましたが、それはまったく実行されないようです!
私はちょっと新鮮なシグナルです。誰かが私にこのことがどういうことを説明することができますか
では動作しません。私はこのコードを実行しようとしている:アラーム(int)がwhileループ
signal(SIGALRM,handler);
alarm(1);
while(1){}
handler
機能は、単に「test」を出力します。
alarm(1)
この場合、最終的に1回だけ実行されます。私はループに入れようとしましたが、それはまったく実行されないようです!
私はちょっと新鮮なシグナルです。誰かが私にこのことがどういうことを説明することができますか
例のループにalarm(1)
を入れるだけでは、呼び出しごとに数マイクロ秒以内にalarm(1)
を無限に呼び出します。 thisが発生します。
alarm()でアラームは既に設定されていますが、配信されていない場合、alarm()の別の呼び出しが以前の呼び出しより優先されます。
つまり、ループの各繰り返しでアラームがクリアされます。ループが永遠に実行されるので、アラームは決して永久に設定されません。
ループ内で 'alarm'を呼び出すと、それを1秒間連続してリセットし、決して逃げる機会はありません。定期的なタイマーが必要な場合は、 'setitimer'または' timer_create'を調べることができます。 –
次回は、[MVCE](http://stackoverflow.com/help/mcve)の提供を検討してください。少なくとも、あなたが尋ねるコードを表示するのではなく、他のコードを表示し、それがあなたを困惑させるコードとどのように違うのかを説明する...また、あなたが求めている機能についてのドキュメントを読んで、答えを見つけることは良い考えです。 – hyde