Source code

Revision control

Copy as Markdown

Other Tools

// ConsoleClose.cpp↩
#include "StdAfx.h"
#include "ConsoleClose.h"
#if !defined(UNDER_CE) && defined(_WIN32)↩
#include "../../../Common/MyWindows.h"
#endif
namespace NConsoleClose {↩
unsigned g_BreakCounter = 0;↩
static const unsigned kBreakAbortThreshold = 2;↩
#if !defined(UNDER_CE) && defined(_WIN32)↩
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;↩
*/
}↩
#endif
/*↩
void CheckCtrlBreak()↩
{↩
if (TestBreakSignal())↩
throw CCtrlBreakException();↩
}↩
*/
CCtrlHandlerSetter::CCtrlHandlerSetter()↩
{↩
#if !defined(UNDER_CE) && defined(_WIN32)↩
if (!SetConsoleCtrlHandler(HandlerRoutine, TRUE))↩
throw "SetConsoleCtrlHandler fails";↩
#endif
}↩
CCtrlHandlerSetter::~CCtrlHandlerSetter()↩
{↩
#if !defined(UNDER_CE) && defined(_WIN32)↩
if (!SetConsoleCtrlHandler(HandlerRoutine, FALSE))↩
{↩
// warning for throw in destructor.↩
// throw "SetConsoleCtrlHandler fails";↩
}↩
#endif
}↩
}↩