console application 截获 ctrl - c

代码
#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)。

你可能感兴趣的:(application)