5 #include "ConsoleClose.h"
7 static int g_BreakCounter = 0;
8 static const int kBreakAbortThreshold = 2;
10 namespace NConsoleClose {
12 static BOOL WINAPI HandlerRoutine(DWORD ctrlType)
14 if (ctrlType == CTRL_LOGOFF_EVENT)
16 // printf("\nCTRL_LOGOFF_EVENT\n");
21 if (g_BreakCounter < kBreakAbortThreshold)
28 case CTRL_BREAK_EVENT:
29 if (g_BreakCounter < kBreakAbortThreshold)
36 bool TestBreakSignal()
39 if (g_BreakCounter > 0)
42 return (g_BreakCounter > 0);
47 if (TestBreakSignal())
48 throw CCtrlBreakException();
51 CCtrlHandlerSetter::CCtrlHandlerSetter()
53 if(!SetConsoleCtrlHandler(HandlerRoutine, TRUE))
54 throw "SetConsoleCtrlHandler fails";
57 CCtrlHandlerSetter::~CCtrlHandlerSetter()
59 if(!SetConsoleCtrlHandler(HandlerRoutine, FALSE))
60 throw "SetConsoleCtrlHandler fails";