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。