因此,我在Visual Studio中开发了一个C ++控制台应用程序,用于记录信用卡读卡器的出勤情况,然后吐出.csv文件。但是,由于该程序现在是,用户必须手动键入"退出"使程序成功关闭并生成.csv。
我知道非技术人员不会意识到这一点,只能点击X按钮并丢失数据。有没有办法捕获信号并允许程序进行清理工作并关闭?
该程序已经只有Windows,所以这不是问题。
答案 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
}