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

the*_*ine 5 c signals console-application windows-console

在 Windows 控制台应用程序中,可以ctrl+c使用以下命令捕获按下的按钮:

\n\n\n\n
#include <stdio.h>\n#include <signal.h>\n\nvoid SigInt_Handler(int n_signal)\n{\n    printf("interrupted\\n");\n}\n\nint main(int n_arg_num, const char **p_arg_list)\n{\n    signal(SIGINT, &SigInt_Handler);\n    getchar(); // wait for user intervention\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xc3\x97这很有效,但如果用户按下关闭控制台窗口的十字键,它根本不起作用。有这方面的信号吗?

\n\n

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

\n

the*_*ine 5

正确的是SIGBREAK,你可以尝试一下:

#include <stdio.h>
#include <signal.h>

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;
}
Run Code Online (Sandbox Code Playgroud)

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