vc控制台程序关闭事件时的处理方式是什么
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容介绍了"vc控制台程序关闭事件时的处理方式是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成
千家信息网最后更新 2026年11月02日vc控制台程序关闭事件时的处理方式是什么
本篇内容介绍了"vc控制台程序关闭事件时的处理方式是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
关键控制台API函数:SetConsoleCtrlHandler
在支持C++ 11以上的编译器中,你可以这么做。
SetConsoleCtrlHandler([](DWORD fdwctrltype)->BOOL { if (fdwctrltype == CTRL_CLOSE_EVENT) { // 你的善后代码... return TRUE; } return FALSE;}, TRUE);最初这么做是很舒服的,但之后发现了问题:
Windows控制台在标记状态下,printf之类的输出函数,会阻塞在标记选择时(点控制台左上角-编辑-标记)。
这就导致了,我们的善后代码中,可能会死锁,例如你要优雅的结束一个线程,这个线程在最后的时候printf了。
线程里printf等待标记状态,SetConsoleCtrlHandler回调函数里等待线程结束,总之就是死锁。
我本来想着,去找到能够获取这种标记状态的控制台API,但找了很久都没有结果。
最后,我就考虑,有没有方法让printf不与标记状态发生死锁,答案是: 输出流重定向。
所以,代码变成这样:
SetConsoleCtrlHandler([](DWORD fdwctrltype)->BOOL { if (fdwctrltype == CTRL_CLOSE_EVENT) { char szbuf[0x1000]; setvbuf(stdout, szbuf, _IOFBF, 0x1000); // 你的善后代码... return TRUE; } return FALSE;}, TRUE);这么做之后,世界果然更美好了,如果最后这些日志信息对你来说是重要的,那么你可能需要写更多代码去实现。
知识点扩展:
实例:
BOOL WINAPI ConsoleHandler(DWORD CEvent){DWORD e = 0;switch (CEvent){case CTRL_C_EVENT:e = CTRL_C_EVENT;break;case CTRL_BREAK_EVENT:e = CTRL_BREAK_EVENT;break;case CTRL_CLOSE_EVENT:e = CTRL_CLOSE_EVENT;break;case CTRL_LOGOFF_EVENT:break;case CTRL_SHUTDOWN_EVENT:break;}return true;}int main(int argc, char* argv[]){if (SetConsoleCtrlHandler((PHANDLER_ROUTINE)ConsoleHandler, TRUE) == FALSE){//安装失败return -1;}GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0); //手工产生一事件}"vc控制台程序关闭事件时的处理方式是什么"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
控制台
控制
标记
代码
状态
线程
事件
函数
更多
知识
死锁
善后
输出
方式
程序
处理
内容
实用
美好
舒服
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
咖啡
上海挚品互联网科技有限公司
互联网科技名片
广州百单互联网科技有限公司
互联网科技金融公司
万达互联网科技
互联网科技视频素材
上海亿帐通互联网科技
成都仁贤领冠互联网科技有限公司
济南和联互联网科技有限公司
银川新华互联网科技学校地址
科技赋能互联网健康
阿里巴巴算科技企业还是互联网
互联网科技公司实习生
互联网科技革命什么开始
宜昌元轩互联网科技有限公司
扫呗互联网科技有限公司
云鲸互联网络科技有限公司
互联网界的黑科技
中国互联网公司的科技投入
苏州找大状互联网科技有限公司
互联网科技战争
艾特科技互联网
多迪互联网科技有限公司
卓越科技互联网 招聘
美国互联网前沿科技
云创客互联网科技公司
互联网科技商业
广州互联网高科技取餐柜
互联网高科技绘画