现在的位置: 首页 > 综合 > 正文

console application 截获 ctrl – c

2012年10月30日 ⁄ 综合 ⁄ 共 932字 ⁄ 字号 评论关闭
代码
#ifdef _MSC_VER
BOOL WINAPI console_handler(DWORD cevent)
{
    
switch(cevent)
    {
    
case CTRL_C_EVENT:
    
case CTRL_BREAK_EVENT:
    
case CTRL_CLOSE_EVENT:
    
case CTRL_LOGOFF_EVENT:
    
case CTRL_SHUTDOWN_EVENT:
        {
                        
//your code here
            exit(0);
            
break;
        }
    
default:
        {
        }
    }
    
return TRUE;
};
#else
void sig_proc(int sig)
{
    signal(SIGINT, SIG_DFL);
    cout 
<< "Shut down the console application ... \n";
        
//your code here
    exit(0);
};
#endif

int main(int argc, char* argv[])
{
#ifdef _MSC_VER
    
if (SetConsoleCtrlHandler( (PHANDLER_ROUTINE)console_handler,TRUE)==FALSE)
    {
        
return -1;
    }
#else
    signal(SIGINT, sig_proc);
#endif
        
//your code here
}

 1. handler function是一个新的线程。

 2. windows下, 如果main thread 阻塞在某个操作(例如读取输入 cin), 则handler function执行有些异常, 大概就是对象的清理工作有问题, 应该和主线程阻塞有关(还没搞清楚怎么回事儿)。

 3. 如果程序中某些资源没有关闭,例如文件, socket, 那么程序并不会退出,即使handler function 执行了exit(0)。

抱歉!评论已关闭.