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

How to perform program cleanup when user presses close button in C++ console app?

本文关键字:关闭按钮 c++ 应用程序 控制台 用户 执行程序      更新时间:2023-10-16

所以我在Visual Studio中开发了一个c++控制台应用程序,用信用卡读卡器保存考勤记录,然后输出一个.csv文件。但是,由于程序现在是正确的,用户必须手动输入"exit"才能使程序成功关闭并生成。csv.

我知道非技术人员不会意识到这一点,他们可能只需要按下X键就会丢失数据。有没有办法捕捉到信号,让程序完成清理工作并关闭?

程序已经是windows专用的,所以这不是问题

使用SetConsoleCtrlHandler设置CTRL_CLOSE_EVENT事件的回调,该事件在按下窗口标题关闭"X"按钮时引发。

注意Ctrl+C事件是不同的:那是CTRL_C_EVENT,但你处理它的方式相同:处理Win32上的Ctrl +C

#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的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
}