http://www.groad.net/bbs/thread-8253-1-1.html

当你在命令行里工作时,经常会输入 Ctrl-C 这个组合键以停止程序的运行。SetConsoleCtrlHandler() 函数可以让一个或多个特定函数在接收到 Ctrl-C, Ctrl-break 这些与控制台有关的信号时得到执行。

  1. BOOL WINAPI SetConsoleCtrlHandler(
  2. _In_opt_  PHANDLER_ROUTINE HandlerRoutine,
  3. _In_      BOOL Add
  4. );

复制代码

函数有两个参数,第 1 个参数是要安装的信号处理函数,当第 2 个参数 Add 设置为 TRUE 时,那么就安装第 1 个参数所表示的处理函数;否则,就从控制台控制例程列表中将之删除。需要注意的是,这里没有指定信号,测试到底是什么信号,是处理程序所负责的事情。

函数的返回值是个布尔值,当函数执行成功时,返回非 0 值;反之,返回 0 值,具体的出错原因,可以用 GetLastError() 函数来获得。

如果第 1 个参数设置为 NULL,且 Add 为 TRUE 时,那么 Ctrl-C 信号会被忽略。

如果已经使用 SetConsoleMode() 设置了 ENABLE_PROCESSED_INPUT 标志,那么系统会将 Ctrl-C 作为键盘输入处理,而不是作为信号处理。

处理程序例程实际上是以进程内的独立线程执行的,正常的程序将继续操作。

处理程序:

  1. BOOL WINAPI HandlerRoutine(
  2. _In_  DWORD dwCtrlType
  3. );

复制代码

带有一个 DWORD 类型值 dwCtrlType ,它用来标识信号(或事件),可以是以下 5 个值之一:

1) CTRL_C_EVENT 表示键盘输入了 Ctrl-C 。
2) CTRL_CLOSE_EVENT 表示控制台窗口正在被关闭。
3) CTRL_BREAK_EVENT 表示 Ctrl_break 信号。
4) CTRL_LOGOFF_EVENT 表示用户正在注销。
5) CTRL_SHUTDOWN_EVENT 表示 Windows 正在关闭。

信号处理程序可以像异常或终止程序那样执行清理操作。当信号处理程序返回 TRUE 时,表示函数已经处理了信号;若是返回 FALSE ,那么就去执行列表中下一个处理程序函数。信号处理程序与设置顺序相反的顺序执行,也就是说,最后一个设置程序将被首先执行,而系统的处理程序在最后执行。

转载于:https://www.cnblogs.com/NickyYe/p/5512084.html

SetConsoleCtrlHandler() -- 设置控制台信号处理函数相关推荐

  1. 在C语言中,SetConsoleTextAttribute(参数1,参数2)是设置控制台窗口字体颜色和背景颜色的函数。GetStdHandle(参数)函数用于获得句柄

    在C语言中,SetConsoleTextAttribute(参数1,参数2)是设置控制台窗口字体颜色和背景颜色的函数. 参数1:句柄 参数2:颜色 颜色的参数 数值 颜色 0 黑色 1 深蓝色 2 深 ...

  2. 【c++】设置控制台窗口字体颜色和背景色(system和SetConsoleTextAttribute函数 )

    编译后弹出的黑框框(exe 可执行文件)总是黑底白字,在做实践大作业时想到尝试改变字体的颜色与背景色,搜索发现有system和SetConsoleTextAttribute两个函数,各有长处,详细了解 ...

  3. Linux 多线程应用中编写安全的信号处理函数

    2019独角兽企业重金招聘Python工程师标准>>> Linux 多线程应用中编写安全的信号处理函数 在 开发多线程应用时,开发人员一般都会考虑线程安全,会使用 pthread_m ...

  4. SetConsoleCtrlHandler 处理控制台消息

    http://blog.csdn.net/zhongguoren666/article/details/8770615 SetConsoleCtrlHandler 处理控制台消息 一.如何处理所有的控 ...

  5. Linux信号 二 信号处理函数注册

    每一个信号都有一个信号处理函数,可以是SIG_IGN, SIG_DFL或者是用户自定义的处理函数.使用用户自定义的处理函数需要注册,注册接口有如下两种. 第一种是signal调用 #include & ...

  6. 2信号处理之:信号产生原因,进程处理信号行为,信号集处理函数,PCB的信号集,sigprocmask()和sigpending(),信号捕捉设定,sigaction,C标准库信号处理函数,可重入函数,

     1信号产生原因 2.进程处理信号行为 manpage里信号3中处理方式: SIG_IGN SIG_DFL                                            默 ...

  7. Linux信号处理函数可中断么,linux中关于信号处理笔记(一)

    #include static void sig_quit(int); int main(void) { sigset_t newmask, oldmask, pendmask; if(signal( ...

  8. c++ sleep函数_Linux 多线程应用中如何编写安全的信号处理函数

    关于代码的可重入性,设计开发人员一般只考虑到线程安全,异步信号处理函数的安全却往往被忽略.本文首先介绍如何编写安全的异步信号处理函数:然后举例说明在多线程应用中如何构建模型让异步信号在指定的线程中以同 ...

  9. linux 信号处理函数详解

    转自:http://blog.csdn.NET/sddzycnqjn/article/details/7285760 1. 信号概念  信号是进程在运行过程中,由自身产生或由进程外部发过来的消息(事件 ...

最新文章

  1. Permission is only granted to system app
  2. 一个问题就可以辨别真假NLP(自然语言处理)研究者
  3. GIS和RS里面的一些小问题
  4. python将一行作为字段_Python 变量代入,指定某一行截取输出字段
  5. VMD如何确定分解层数(一):最优变分模态分解(OVMD)---VMD分解的基础上确定分解层数和更新步长
  6. idea破解码生成地址
  7. u盘插上显示计算机限制,为什么U盘插入电脑后CPU显示100%
  8. sed 替换文件中的字符串
  9. Angular学习笔记第三章——创建组件
  10. C++编程语言中重载运算符(operator)介绍
  11. 【转】Java技能清单
  12. 计算机内部的单位换算(内存)byte B KB MB GB TB
  13. 加州理工学院宋飏老师招收机器学习全奖博士生|2023秋季
  14. 20190917练习题总结——选择题
  15. odoo本地文档功能开发记录
  16. flutter常用插件
  17. x^(1/x)相关问题极限求解思路
  18. #VCS# 关于Verdi KDB 数据库
  19. mysql中goup与order的混合使用
  20. AOP的底层原理:动态代理

热门文章

  1. CSS3那些不为人知的高级属性
  2. as3调用外部swf里的类的方法
  3. WebService的基本概念:java webservice,什么是webservice
  4. CISSP的成长之路(十六):复习访问控制(1)
  5. 游戏开发中的数学和物理算法(7):角度 vs 弧度
  6. sql2000-2 4/19
  7. Oracle中row_number()、rank()、dense_rank() 的区别
  8. Java5线程并发库之LOCK(锁)CONDITION(条件)实现线程同步通信
  9. BZOJ3040:最短路——题解
  10. Discuz!X集群部署的系统方案和改造方式讨论