我在 Win32 C++ 控制台程序中处理 CTRL
+ C
事件时遇到了一些问题。
基本上我的程序看起来像这样:(基于另一个问题: Windows Ctrl-C - 在命令行应用程序中清理本地堆栈对象)
bool running;
int main() {
running = true;
SetConsoleCtrlHandler((PHANDLER_ROUTINE) consoleHandler, TRUE);
while (running) {
// do work
...
}
// do cleanup
...
return 0;
}
bool consoleHandler(int signal) {
if (signal == CTRL_C_EVENT) {
running = false;
}
return true;
}
问题是根本没有执行清理代码。
在处理函数执行后,进程终止,但在主循环之后不执行代码。怎么了?
编辑:根据要求,这是一个类似于我的程序的最小测试用例:http: //pastebin.com/6rLK6BU2
我的输出中没有“测试清理指令”字符串。
我不知道这是否重要,我正在使用 MinGW 进行编译。
编辑 2:测试用例程序的问题是使用 Sleep()
函数。没有它,程序按预期工作。
在 Win32 中,函数处理程序在另一个线程中运行,因此当处理程序/线程结束其执行时,主线程正在休眠。可能这是进程中断的原因?
原文由 eang 发布,翻译遵循 CC BY-SA 4.0 许可协议
以下代码适用于我: