Behandeln Sie STRG + C auf Win32
Ich habe einige Probleme mit der Handhabung vonSTRG+C Ereignisse, in aWin32 C ++ Konsolenprogramm.
Grundsätzlich sieht mein Programm so aus: (basierend auf dieser anderen Frage:Windows Strg-C - Lokale Stapelobjekte in der Befehlszeilen-App bereinigen)
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;
}
Das Problem ist, dass der Bereinigungscode überhaupt nicht ausgeführt wird.
Nach der Ausführung der Handler-Funktion wird der Prozess beendet, ohne jedoch den Code nach der Hauptschleife auszuführen. Was ist falsch?
BEARBEITEN: wie gewünscht, ist dies ein minimaler Testfall, der meinem Programm ähnelt:http://pastebin.com/6rLK6BU2
In meiner Ausgabe wird die Zeichenfolge "Testbereinigungsanweisung" nicht angezeigt.
Ich weiß nicht, ob das wichtig ist, mit dem ich kompiliereMinGW.
EDIT 2: Das Problem mit dem Testfallprogramm ist die Verwendung desSleep()
Funktion. Ohne es funktioniert das Programm wie erwartet.
In Win32 wird der Funktionshandler in einem anderen Thread ausgeführt. Wenn der Handler / Thread seine Ausführung beendet, schläft der Hauptthread. Wahrscheinlich ist dies die Ursache für eine Prozessunterbrechung?