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?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage