📄 consoleclose.cpp
字号:
// ConsoleClose.cpp#include "StdAfx.h"#include "ConsoleClose.h"#ifdef ENV_UNIX#include <signal.h>#endifstatic int g_BreakCounter = 0;static const int kBreakAbortThreshold = 2;namespace NConsoleClose {#ifdef ENV_UNIXstatic void HandlerRoutine(int){ g_BreakCounter++; if (g_BreakCounter < kBreakAbortThreshold) return ; exit(EXIT_FAILURE);}#elsestatic BOOL WINAPI HandlerRoutine(DWORD aCtrlType){ g_BreakCounter++; if (g_BreakCounter < kBreakAbortThreshold) return TRUE; return FALSE; /* switch(aCtrlType) { case CTRL_C_EVENT: case CTRL_BREAK_EVENT: if (g_BreakCounter < kBreakAbortThreshold) return TRUE; } return FALSE; */}#endifbool TestBreakSignal(){ /* if (g_BreakCounter > 0) return true; */ return (g_BreakCounter > 0);}void CheckCtrlBreak(){ if (TestBreakSignal()) throw CCtrlBreakException();}CCtrlHandlerSetter::CCtrlHandlerSetter(){#ifdef ENV_UNIX memo_sig_int = signal(SIGINT,HandlerRoutine); // CTRL-C if (memo_sig_int == SIG_ERR) throw "SetConsoleCtrlHandler fails (SIGINT)"; memo_sig_term = signal(SIGTERM,HandlerRoutine); // for kill -15 (before "kill -9") if (memo_sig_term == SIG_ERR) throw "SetConsoleCtrlHandler fails (SIGTERM)";#else if(!SetConsoleCtrlHandler(HandlerRoutine, TRUE)) throw "SetConsoleCtrlHandler fails";#endif}CCtrlHandlerSetter::~CCtrlHandlerSetter(){#ifdef ENV_UNIX signal(SIGINT,memo_sig_int); // CTRL-C signal(SIGTERM,memo_sig_term); // kill {pid}#else if(!SetConsoleCtrlHandler(HandlerRoutine, FALSE)) throw "SetConsoleCtrlHandler fails";#endif}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -