What exactly is the effect of Ctrl-C on C++ Win32 console applications?
控制台应用程序中的
Ctrl-C将生成信号。该信号的默认处理程序调用ExitProcess终止应用程序。您可以通过使用SetConsoleCtrlHandler函数为信号设置自己的处理函数来覆盖此行为。
编辑:SIGINT,而不是SIGTERM。阿萨夫(Assaf)报告说,没有使用过的SIGINT没有销毁任何对象(至少在Windows上没有)。
系统发送一个SIGINT。这个概念适用于所有C实现(有一些差异)。要处理它,您可以调用signal,并指定一个信号处理程序。请参阅Open Group和MSDN上有关信号功能的文档。
第二个问题有些棘手,可能取决于实现方式。最好的选择是处理信号,这使您可以手动使用
您可以使用一些简单的代码来测试是否发生堆栈退卷:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <iostream> #include <windows.h> using namespace std; struct A { ~A() { cerr <<"unwound" << endl; } }; int main() { A a; while(1) { Sleep(1000); } } |
是否发生取决于运行时如何处理Ctrl-C。以我的经验,它不会发生。