Ctrl-C对C++ Win32控制台应用程序的影响究竟是什么?

Ass*_*vie 16 c++ console winapi copy-paste

  1. 是否有可能以某种方式处理此事件?
  2. 在堆栈展开和静态/全局对象的释放方面会发生什么?

Shi*_*C G 13

控制台应用程序中的Ctrl-C将生成一个信号.此信号的默认处理程序调用ExitProcess来终止应用程序.您可以通过使用SetConsoleCtrlHandler函数为信号设置自己的处理函数来覆盖此行为.


Mat*_*hen 7

编辑:SIGINT,而不是SIGTERM.而Assaf报告说,没有任何对象被破坏(至少在Windows上),因为没有使用SIGINT.

系统发送SIGINT.这个概念适用于所有C实现(有一些差异).要处理它,你可以调用signal,指定一个信号处理程序.请参阅Open GroupMSDN上有关信号功能的文档.

第二个问题有点棘手,可能取决于实施.最好的办法是处理信号,它允许你使用deleteexit()手动.