C++ WIN32控制台异常关闭回调函数

/*
This is an example of the SetConsoleCtrlHandler function that is used to install a control handler.

When a CTRL+C signal is received, the control handler returns TRUE, indicating that it has handled the signal. Doing this prevents other control handlers from being called.

When a CTRL_CLOSE_EVENT signal is received, the control handler returns TRUE, causing the system to display a dialog box that gives the user the choice of terminating the process and closing the console or allowing the process to continue execution. If the user chooses not to terminate the process, the system closes the console when the process finally terminates.

When a CTRL+BREAK, CTRL_LOGOFF_EVENT, or CTRL_SHUTDOWN_EVENT signal is received, the control handler returns FALSE. Doing this causes the signal to be passed to the next control handler function. If no other control handlers have been registered or none of the registered handlers returns TRUE, the default handler will be used, resulting in the process being terminated.

Note that MyErrorExit is a placeholder for an application-defined function to display and handle error conditions.*/

BOOL CtrlHandler(DWORD fdwCtrlType)
{
    switch (fdwCtrlType)
    {
        // Handle the CTRL+C signal. 

        case CTRL_C_EVENT: 

            Beep(1000, 1000);
            return TRUE; 

        // CTRL+CLOSE: confirm that the user wants to exit. 

        case CTRL_CLOSE_EVENT: 

            return TRUE; 

        // Pass other signals to the next handler. 

        case CTRL_BREAK_EVENT: 

        case CTRL_LOGOFF_EVENT: 

        case CTRL_SHUTDOWN_EVENT: 

        default: 

            return FALSE;
    }
} 

void main(void)
{
    BOOL fSuccess; 

    fSuccess = SetConsoleCtrlHandler(
        (PHANDLER_ROUTINE) CtrlHandler,  // handler function
        TRUE);                           // add to list
    if (! fSuccess)
        MyErrorExit("Could not set control handler");
}

 


本文 由 cococo点点 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,请注明出处:
转载自:cococo点点 http://www.cnblogs.com/coder2012

时间: 2025-01-15 03:52:53

C++ WIN32控制台异常关闭回调函数的相关文章

PHP 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法_php技巧

异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程.这种情况称为异常. PHP 5 添加了类似于其它语言的异常处理模块.在 PHP 代码中所产生的异常可被 throw 语句抛出并被 catch 语句捕获.需要进行异常处理的代码都必须放入 try 代码块内,以便捕获可能存在的异常.每一个 try 至少要有一个与之对应的 catch.使用多个 catch 可以捕获不同的类所产生的异常.当 try 代码块不再抛出异常或者找不到 catch 能匹配所抛出的异常时,PHP 代码就会在跳转到最后一

关于C#调用C++函数绑定回调函数后发生CrossThreadMessagingException异常的问题

问题描述 代码如下://事件函数原型//typedefBRIINT32(CALLBACK*PCallBack_EventEx)(PBRI_EVENTpEvent,BRIUINT32dwUserData);//事件函数代理publicdelegateInt32CallbackDelegate(BriSDKLib.TBriEvent_DataeventData,Int32dwUserData);//代理对象publicstaticCallbackDelegatecallback;//事件回调函数pr

C#实现的Win32控制台线程计时器功能示例_C#教程

本文实例讲述了C#实现的Win32控制台线程计时器功能.分享给大家供大家参考,具体如下: 在C#中提供了三种类型的计时器: 1.基于 Windows 的标准计时器(System.Windows.Forms.Timer) 2.基于服务器的计时器(System.Timers.Timer) 3.线程计时器(System.Threading.Timer) 一.基于 Windows 的标准计时器(System.Windows.Forms.Timer) 首先注意一点就是:Windows 计时器是为单线程环境

回调函数

1 什么是回调 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用.同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用:回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口:异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口).回调和异步调用的关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通

编写回调函数

有些Win32 API函数要求将一个函数指针作为自己的参数使用.Windows API函数随后就可以调用自变量函数(通常是在以后发生特定的事件时).这一技术就叫作"回调函数".回调函数的例子包括窗口进程以及我们在打印过程中设置的回调(为后台打印程序提供回调函数的地址,使其能更新状态,并在必要的时候中止打印). 另一个例子是API函数EnumWindows(),它能枚举目前系统内所有顶级窗口.EnumWindows()要求获取一个函数指针作为自己的参数,然后搜索由Windows内部维护的

深入理解Node.js 事件循环和回调函数_node.js

本文详细的介绍了Node.js 事件循环和Node.js回调函数,废话不多说了,具体看下面把.  一.Node.js 事件循环 Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高.Node.js 的每一个 API 都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发.Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现.Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观

C# dll事件中如何执行Javascript的回调函数

前言: 由于js 远程请求  XMLHttpRequest() 不支持多线程,所以用C# 写了个dll 多线程远程抓住供js调用. 最初代码为: C#代码 /// <summary> /// 异步请求入口 /// </summary> /// <param name="url">传入http地址 注意加http</param> /// <param name="timeoutStr">超时时间</pa

C#调用C++回调函数的问题

C++的回调函数中有一个参数是,是返回一个字符串,原则如下: typedef void (*TDataEvent)(char *AData ,int ALen); 其中char *AData是从DLL中返回一个字符串,串的内存已经在DLL中分配了 下面中我在C#中定义的委托 public delegate void TDataEvent(Byte[] AData, int ALen); 下面是回调函数的设置代码: Event=new clReceivelDllPoxy.TDataEvent(ge

C#捕获控制台(console)关闭事件

有时,公司内部自己开发的控制台(console)应用程序在服务器上运行会因为遇到某些异常自动关闭了,这就需要用某机制来捕获控制台(console)关闭事件,把这样写日志,便于维护和调试. 源码如下: 程序代码 Code 1using System; 2using System.Runtime.InteropServices; 3using System.Threading; 4using System.Diagnostics; 5 6namespace xmlpusher 7{ 8 public