Ich habe eine Probe zu prüfen, was passiert, wenn Sie Strg + C in Windows-Konsolenanwendung gedrückt wird:warum in c erste chace Ausnahme bekommen ++
bool TerminationFlag=true;
int main()
{
g_hTerminateEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL);
::SetConsoleCtrlHandler(ConsoleCtrlHandler, TRUE);
while(1)
{
if(TerminationFlag == false)
{
break;
}
}
return 0;
}
BOOL WINAPI ConsoleCtrlHandler(DWORD dwCtrlType)
{
if (dwCtrlType == CTRL_C_EVENT ||
dwCtrlType == CTRL_BREAK_EVENT ||
dwCtrlType == CTRL_CLOSE_EVENT)
{
TerminationFlag=false;
::SetEvent(g_hTerminateEvent);
return TRUE;
}
return FALSE;
}
ich den Code getestet, indem es läuft in der visuellen Debugging-Option starten Studio, wenn ich ctrl + c drücken erhalte ich die folgende Meldung
Erste-Chance-Ausnahme bei 0x7c87647d
wenn Ich drücke auf continue Option mein Code kommt zu der Zeile TerminationFlag=false;
, obwohl ich Strg + C im Steuerelement Handler behandelt habe. Kannst du mir bitte sagen, was das Problem ist?
Wenn die erste Chance Ausnahme auftritt, schauen Sie sich die Ausnahme Datensatz, um zu sehen, was ausgelöst wird und warum. –
@RaymondChen Wie sieht man Ausnahmerekord Sir? – Dany
Der Ausnahmedatensatz ist Teil des EXCEPTION_POINTERS, das an den Ausnahmebehandler übergeben wird. Einige Debugger haben einen speziellen Befehl, um den aktuellen Ausnahmedatensatz anzuzeigen. (Zum Beispiel verwendet windbg '.ecxr'.) –