私はコンソール モードの Windows アプリケーション (Unix から移植) を持っていますが、これはもともと受信時にクリーンな終了を行うように設計されていました^C(Unix SIGINT
)。この場合の正常な終了には、リモート ネットワーク接続が終了するまで、かなり長い時間待機する必要があります。(これが の通常の動作ではないことはわかっていますが^C、変更する立場にはありません。) プログラムはシングルスレッドです。
(Unix の場合のように) または の^Cいずれかでトラップできます。プログラムが CMD.EXE の下で実行されている場合、どちらも正しく機能します。ただし、MSYS に付属の「bash」シェルを使用すると (プログラムのビルドに MinGW 環境を使用しています。これにより、Unix メイクファイルを再利用できるようになります)、プログラムはランダムな短い時間 (より短い時間) 強制的に終了します。 100 ミリ秒) の後に. 前述したように、プログラムはリモート ネットワーク接続が終了するまで待機する必要があるため、これは容認できません。signal(SIGINT)
SetConsoleCtrlHandler
^C
このプログラムを MSYS bash の下で実行したいと思う人は多いでしょう。また、この影響によりテスト スイートが壊れます。プログラム内から (理想的)、またはシェルの設定によって (許容可能)、問題を回避する方法を見つけることができませんでした。誰でも何かお勧めできますか?