当用户在C ++控制台应用程序中按下关闭按钮时,如何执行程序清理?

时间:2016-11-11 00:19:14

标签: c++ visual-studio console-application

因此,我在Visual Studio中开发了一个C ++控制台应用程序,用于记录信用卡读卡器的出勤情况,然后吐出.csv文件。但是,由于该程序现在是,用户必须手动键入"退出"使程序成功关闭并生成.csv。

我知道非技术人员不会意识到这一点,只能点击X按钮并丢失数据。有没有办法捕获信号并允许程序进行清理工作并关闭?

该程序已经只有Windows,所以这不是问题。

1 个答案:

答案 0 :(得分:0)

使用SetConsoleCtrlHandler设置{Window}字幕关闭时引发的CTRL_CLOSE_EVENT事件的回调" X"按下按钮。

请注意, Ctrl + C 事件是不同的:CTRL_C_EVENT,但您可以采用相同的方式处理它:{{3} }

#include <Windows.h>

BOOL onConsoleEvent(DWORD event) {

    switch( event ) {
        case CTRL_C_EVENT:
        case CTRL_CLOSE_EVENT:
            // do stuff
            break;
    }

    return TRUE;
}

int main(int argc, char* argv[]) {

    if( !SetConsoleCtrlHandler( onConsoleEvent, TRUE ) ) {
        // die
    }

    // do stuff
}

正如您所说,这是特定于Windows的,不应该是一个问题。

请注意,您可以使用可移植的signal函数为SIGINT事件设置处理程序(对应于 Ctrl + C )据我所知,Windows&#39; signal函数没有与X按钮对应的回调事件,因此您必须使用SetConsoleCtrlHandler

#include <signal.h> // use `<cstdlib>` in C++

void onSigint(int value) {
    // do stuff
}

int main(int argc, char* argv[]) {

    signal(SIGINT, onSigint);

    // do stuff
}