この質問は私の個人的な好奇心が何よりも重要です。私はすべてのコードを少なくともWindowsとMacと互換性を保つようにしています。これまでのところ私は自分のコードをPOSIXに基づいて構築する必要があることを学んだが、それはちょうど素晴らしいですが...シグナルを扱うクロスプラットフォームのC++を書くにはどうすればよいですか?
Windowsにはsigaction
という関数がありませんのでsignal
が使用されていますか?によると: What is the difference between sigaction and signal?信号にいくつかの問題があります。
- 信号()関数は、現在のハンドラの実行中に到着からの他の信号をブロックしません。 sigaction()は現在のハンドラが返るまで他のシグナルをブロックすることができます。
- signal()関数は、ほぼすべての信号に対してシグナルアクションをSIG_DFL(デフォルト)に戻します。つまり、signal()ハンドラは最初のアクションとして自身を再インストールする必要があります。また、信号が検出され、ハンドラが再インストールされてから、信号の2番目のインスタンスが到着した場合、デフォルトの動作(通常は終了、時には偏見、つまりコアダンプ)が発生する脆弱性のウィンドウが開きます。
2つのSIGINTのは、アプリケーションがデフォルトの動作で終了しますすぐに来ている場合。この動作を修正する方法はありますか?これらの2つの問題は、例えばSIGINTをブロックしたいというプロセスに他にどのような影響がありますか?信号を使用している間に実行する可能性のある他の問題はありますか?どうすれば修正できますか?
なぜ、ゲームでとにかく信号を使用したいのですか? – selbie
'sigaction'をサポートするプラットフォームでは、' #define HAVE_SIGACTION'を行うことができます。次に、defineをチェックして、 'HAVE_SIGACTION'が定義されていなければ新しいdefine(' #define my_signal signal')を作成するか、定義されている場合は 'sigaction'を使って新しい関数(my_signal(...) 。 –