C ++:在SIGINT之后继续执行

好的,我正在写一个正在做一些相当繁重的分析的程序,我希望能够很快的停下来。

我加了signal(SIGINT, terminate); 到主要和定义终止的开始,如:

 void terminate(int param){ cout << endl << endl << "Exit [N]ow, or [A]fter this url?" << endl; std::string answer; cin >> answer; if(answer[0] == 'n' || answer[0] == 'N'){ terminateParser(); exit(1); }else if(answer[0] == 'a' || answer[0] == 'A'){ quitAfterUrl = true; } } 

在Linux中,这个工作正如我所期望的那样,那就是等待用户input。 但是,当我试图在Windows中做同样的事情,它显示消息并退出。

有什么办法可以阻止SIGINT立即closures程序?

更新:

当我尝试

 BOOL WINAPI handler(DWORD dwCtrlType) { if (CTRL_C_EVENT == dwCtrlType) { // ask the user } return FALSE; } 

正如格雷戈里所build议的那样,该程序仍然毫不客气地退出,而不会停止用户input。

更新2:我不完全确定它是什么,但代码现在工作。 谢谢大家的帮助。

来自MSDN:

注意 SIGINT不支持任何Win32应用程序,包括Windows 98 / Me和Windows NT / 2000 / XP。 当发生CTRL + C中断时,Win32操作系统会生成一个新线程来专门处理该中断。 这可能会导致单线程应用程序(如UNIX)变成多线程,从而导致意外的行为。

这意味着您将不得不使用预处理指令并实施Windows特定的解决方案 。

 BOOL WINAPI handler(DWORD dwCtrlType) { if (CTRL_C_EVENT == dwCtrlType) { // ask the user } return FALSE; } 

main的开始你做

 SetConsoleCtrlHandler(handler, TRUE);