にCTRL + Cを処理します。私は<em>Win32のC++</em>コンソールプログラムでは、<kbd>CTRL +</kbd><kbd>C</kbd>イベントの処理に関するいくつかの問題を持っているのWin32
基本的に私のプログラムは以下のようになります。問題はまったく実行されていないクリーンアップコードである
bool running;
int main() {
running = true;
SetConsoleCtrlHandler((PHANDLER_ROUTINE) consoleHandler, TRUE);
while (running) {
// do work
...
}
// do cleanup
...
return 0;
}
bool consoleHandler(int signal) {
if (signal == CTRL_C_EVENT) {
running = false;
}
return true;
}
:(Windows Ctrl-C - Cleaning up local stack objects in command line appこの他の質問に基づきます)。
ハンドラ関数の実行後、プロセスは終了しますが、メインループの後にコードは実行されません。どうしましたか?
EDIT:要求されたとして、これは私のプログラムに似て、最小限のテストケースである:http://pastebin.com/6rLK6BU2
私は、出力の「テストのクリーンアップ命令」の文字列を得ることはありません。
これが重要かどうかわかりませんが、MinGWでコンパイルしています。
EDIT 2:テストケースプログラムに問題がSleep()
関数の使用です。それがなければ、プログラムは期待どおりに動作します。
関数ハンドラは別のスレッドで実行されるため、ハンドラ/スレッドの実行が終了するとメインスレッドはスリープ状態になります。これがプロセスの中断の原因でしょうか?
'SetConsoleCtrlHandler'は何を返しますか? – Caesar
SetConsoleCtrlHandlerの戻り値は何ですか?あなたはエラーをチェックしていません、btw – lpapp
'ConsoleHandler'機能はまったく動いていますか?デバッガでプログラムを実行してブレークポイントを設定すると、ブレークポイントで停止しますか? –