| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- // ConsoleClose.cpp
- #include "StdAfx.h"
- #include "ConsoleClose.h"
- static int g_BreakCounter = 0;
- static const int kBreakAbortThreshold = 2;
- namespace NConsoleClose {
- static BOOL WINAPI HandlerRoutine(DWORD ctrlType)
- {
- if (ctrlType == CTRL_LOGOFF_EVENT)
- {
- // printf("\nCTRL_LOGOFF_EVENT\n");
- return TRUE;
- }
- g_BreakCounter++;
- if (g_BreakCounter < kBreakAbortThreshold)
- return TRUE;
- return FALSE;
- /*
- switch(ctrlType)
- {
- case CTRL_C_EVENT:
- case CTRL_BREAK_EVENT:
- if (g_BreakCounter < kBreakAbortThreshold)
- return TRUE;
- }
- return FALSE;
- */
- }
- bool TestBreakSignal()
- {
- /*
- if (g_BreakCounter > 0)
- return true;
- */
- return (g_BreakCounter > 0);
- }
- void CheckCtrlBreak()
- {
- if (TestBreakSignal())
- throw CCtrlBreakException();
- }
- CCtrlHandlerSetter::CCtrlHandlerSetter()
- {
- if(!SetConsoleCtrlHandler(HandlerRoutine, TRUE))
- throw "SetConsoleCtrlHandler fails";
- }
- CCtrlHandlerSetter::~CCtrlHandlerSetter()
- {
- if(!SetConsoleCtrlHandler(HandlerRoutine, FALSE))
- throw "SetConsoleCtrlHandler fails";
- }
- }
|