アラーム信号を受信するまでプログラムをループで実行したいのですが、その間に割り込み信号を受信するたびにいくつかのコードを実行します。複数の割り込みをキャッチできません
次はほとんど機能します。
bool volatile waiting = true;
bool volatile interrupted = false;
void catch_interrupt(int x)
{
interrupted = true;
}
void catch_alarm(int x)
{
waiting = false;
}
void alive()
{
signal(SIGINT, catch_interrupt);
signal(SIGALRM, catch_alarm);
alarm(10);
while (waiting)
{
if (interrupted)
{
printf("interrupted\n");
interrupted = false;
}
}
printf("done\n");
}
問題はそれだけで最初の割り込み信号のために働くということです。 2番目の割り込みは、プログラムを強制終了します(「完了」を印刷することはありません)。私は、シグナルハンドラが信号に応答して呼び出されたときsignal()
が解除されていると設定
^Cinterrupted
^Cinterrupted
done
ああ、私はそれほど疑わしい。これはどこに文書化されていますか? – Max
@Max「man signal」を試してください。私の(Linuxの)マニュアルページでは、これについてはっきりと説明しています。 – unwind
私は分かりません。私は古いHPワークステーションでコーディングしていた約18年前にこの問題に気がつきました。私たちは、シグナルの再活性化が我々が期待したことをしていることを理解しました。ニンジンとスティックで学ぶ:)そして、ジョンの答えはおそらく20歳ではないので、おそらくより良いです。 –