⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 consoleclose.cpp

📁 由7-zip提供的压缩、解压缩程序
💻 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 + -