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

时间:2014-10-30 16:45:15

标签: c signals console-application windows-console

在Windows控制台应用程序中,可以通过使用:

来抓住ctrl+c
#include <stdio.h>
#include <signal.h>

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。有办法吗?

1 个答案:

答案 0 :(得分:2)

正确的是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;
}

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