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を押すと、VisualStudioでデバッグの開始オプションを使用してコードを実行してコードをテストしました。次のメッセージが表示されます。
0x7c87647dでの最初のチャンスの例外
続行オプションを押すとTerminationFlag=false;
、コントロールハンドラーでCtrl + Cを処理したにもかかわらず、コードが行に表示されます。何が問題なのか教えていただけますか?