Windows控制台应用程序 – 关闭事件的信号

在Windows控制台应用程序中,可以使用以下命令按住ctrl+c

 #include  #include  void SigInt_Handler(int n_signal) { printf("interrupted\n"); } int main(int n_arg_num, const char **p_arg_list) { signal(SIGINT, &SigInt_Handler); getchar(); // wait for user intervention } 

这很有效,除非用户按下关闭控制台窗口的十字×根本不起作用。 那有什么信号吗?

我需要这个的原因是我有这个CUDA应用程序,如果在计算某些东西时关闭,它会导致计算机崩溃。 代码是多平台的,所以我更喜欢使用信号而不是SetConsoleCtrlHandler 。 有办法吗?

正确的是SIGBREAK ,您可以尝试:

 #include  #include  void SigInt_Handler(int n_signal) { printf("interrupted\n"); exit(1); } void SigBreak_Handler(int n_signal) { printf("closed\n"); exit(2); } int main(int n_arg_num, const char **p_arg_list) { signal(SIGINT, &SigInt_Handler); signal(SIGBREAK, &SigBreak_Handler); getchar(); // wait for user intervention return 0; } 

关闭控制台窗口后,程序将打印"closed"并返回2。