在Win32上处理CTRL + C

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

我的输出中没有得到“ test cleanup-instruction”字符串。

我不知道这是否重要,我正在使用MinGW进行编译


编辑2:测试用例程序的问题是该Sleep()功能的使用没有它,该程序将按预期工作。

在Win32中,函数处理程序在另一个线程中运行,因此当处理程序/线程结束执行时,主线程处于休眠状态。这可能是过程中断的原因吗?

lpapp

以下代码对我有用:

#include <windows.h> 
#include <stdio.h> 

BOOL WINAPI consoleHandler(DWORD signal) {

    if (signal == CTRL_C_EVENT)
        printf("Ctrl-C handled\n"); // do cleanup

    return TRUE;
}

int main()
{
    running = TRUE;
    if (!SetConsoleCtrlHandler(consoleHandler, TRUE)) {
        printf("\nERROR: Could not set control handler"); 
        return 1;
    }

    while (1) { /* do work */ }

    return 0;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Win32 C ++ BitBlt透明度

来自分类Dev

Win32 C ++可以重新使用“旧位图”吗?

来自分类Dev

Poco C ++库和Win32 GUI集成

来自分类Dev

在C ++ Win32程序中,如何修改菜单标题?

来自分类Dev

C ++ Win32在WM_DEVICECHANGE上未收到DBT_DEVICEARRIVAL或DBT_DEVICEREMOVECOMPLETE

来自分类Dev

C ++ Win32 Api资源文件

来自分类Dev

使用C ++ Win32 API启用视觉样式吗?

来自分类Dev

Win32 API C ++菜单栏

来自分类Dev

C中的win32 FillRect()函数问题

来自分类Dev

Win32 C ++检测USB驱动器损坏

来自分类Dev

C ++ NetBeans Win32 hwnd图标

来自分类Dev

C ++ Win32侦听全局按键绑定

来自分类Dev

Win32(C ++)中的选项卡损坏

来自分类Dev

使用mingw在win32上使用C printf()

来自分类Dev

我的Win32 C ++“ Hello World程序”无法编译

来自分类Dev

C Win32:窗口自动关闭

来自分类Dev

C Win32 API:设置复选框的状态

来自分类Dev

在不使用WndProc Win32 C ++的情况下在运行时创建事件处理程序

来自分类Dev

在win32下不能生成dlldata.c?

来自分类Dev

C ++ 11和Win32 wchar_t

来自分类Dev

如何在Win32 C ++中的工具栏按钮上动态添加自定义图像?

来自分类Dev

win32 C ++在屏幕上放置图像

来自分类Dev

在Win32,C ++中进行连续串行写入

来自分类Dev

C ++,Win32错误

来自分类Dev

Win32控制台写入(C / C ++)

来自分类Dev

C ++ Win32:加速位图操作

来自分类Dev

使用mingw在win32上使用C printf()

来自分类Dev

按钮按下处理Win32 C ++

来自分类Dev

在通用 Windows 应用程序 C++ 上使用 win32 DLL 库