我制作了一个示例来检查在 Windows 控制台应用程序中按下 Ctrl+C 时会发生什么:
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;
}
当我按下 ctrl+c 时,我通过使用 Visual Studio 中的启动调试选项运行代码来测试代码我收到以下消息
0x7c87647d 处的第一次机会异常
当我按下继续选项时,TerminationFlag=false;
即使我在控制处理程序中处理了 Ctrl+C,我的代码也会出现。你能告诉我有什么问题吗?