iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >vc控制台程序关闭事件时的处理方式是什么
  • 941
分享到

vc控制台程序关闭事件时的处理方式是什么

2023-06-21 23:06:58 941人浏览 八月长安
摘要

本篇内容介绍了“vc控制台程序关闭事件时的处理方式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!关键控制台api函数:SetConso

本篇内容介绍了“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控制台程序关闭事件时的处理方式是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: vc控制台程序关闭事件时的处理方式是什么

本文链接: https://www.lsjlt.com/news/301263.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vc控制台程序关闭事件时的处理方式是什么
    本篇内容介绍了“vc控制台程序关闭事件时的处理方式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!关键控制台API函数:SetConso...
    99+
    2023-06-21
  • vc控制台程序关闭事件时的处理方式及注意点详解
    百度可以找到很多关于这个问题解决的方法 关键控制台API函数:SetConsoleCtrlHandler 在支持C++ 11以上的编译器中,你可以这么做。 SetConsoleC...
    99+
    2024-04-02
  • VC中控制台程序创建窗口的方法是什么
    本篇内容主要讲解“VC中控制台程序创建窗口的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“VC中控制台程序创建窗口的方法是什么”吧!在VC控制台程序中调用D3DVideoRender时...
    99+
    2023-06-21
  • Java GUI事件处理方式是什么
    本篇内容主要讲解“Java GUI事件处理方式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java GUI事件处理方式是什么”吧!事件处理主要涉及:事件源,事件,事件...
    99+
    2023-06-21
  • Android触屏事件的处理方式是什么
    Android触屏事件的处理方式是通过监听和响应触摸事件来实现。具体来说,可以通过以下几种方式来处理触屏事件:1. 在Activit...
    99+
    2023-08-11
    Android
  • Android事件处理的两种方式是什么
    这篇文章主要讲解了“Android事件处理的两种方式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android事件处理的两种方式是什么”吧!安卓提供了两种方式的事件处理:基于回调的事...
    99+
    2023-07-05
  • 关于controller的异常处理及service层的事务控制方式
    目录controller异常处理及service层的事务控制controller层Exception异常事务回滚失效问题Spring的@Transactional源码中写道测试①测试...
    99+
    2024-04-02
  • Delphi中的事件处理机制是什么
    Delphi中的事件处理机制是一种基于观察者模式的设计模式,通过事件来实现对象之间的松耦合通信。在Delphi中,事件是一种特殊类型...
    99+
    2024-03-13
    Delphi
  • javascript事件处理的过程是什么
    本文小编为大家详细介绍“javascript事件处理的过程是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“javascript事件处理的过程是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,...
    99+
    2024-04-02
  • C#鼠标事件的处理机制是什么
    本篇内容介绍了“C#鼠标事件的处理机制是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C#鼠标事件包括鼠标的很多操作,比如为用户提供鼠标...
    99+
    2023-06-17
  • 微信小程序事件处理和数据绑定的方法是什么
    这篇文章主要介绍“微信小程序事件处理和数据绑定的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序事件处理和数据绑定的方法是什么”文章能帮助大家解决问题。WXML(WeiXin Ma...
    99+
    2023-06-19
  • PHP文件处理中目录的关闭和打开方法是什么
    这篇文章主要讲解了“PHP文件处理中目录的关闭和打开方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP文件处理中目录的关闭和打开方法是什么”吧!opendir() 函数,打开目录...
    99+
    2023-06-25
  • Vue事件处理的原理与过程是什么
    这篇文章主要讲解了“Vue事件处理的原理与过程是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue事件处理的原理与过程是什么”吧!事件绑定Vue中的事件绑定与原生JavaScript中...
    99+
    2023-07-05
  • python中强制关闭线程、协程与进程的方法是什么
    这篇“python中强制关闭线程、协程与进程的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python中强制关闭...
    99+
    2023-07-05
  • Python文件和异常处理打开、读写、关闭文件的方法是什么
    本篇内容介绍了“Python文件和异常处理打开、读写、关闭文件的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!模块导入和使用模块要...
    99+
    2023-07-05
  • JavaScript中的程序控制流和函数方法是什么
    本篇内容主要讲解“JavaScript中的程序控制流和函数方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript中的程序控制流和函数方法是什么”吧!程序控制流程序的运行可以...
    99+
    2023-07-04
  • android事件分发与处理的方法是什么
    Android事件分发与处理的方法主要有以下几种:1. 触摸事件分发处理:Android中的触摸事件主要包括按下、移动、抬起等动作。...
    99+
    2023-09-13
    android
  • Win10系统一键关闭所有程序的方法是什么
    本篇内容主要讲解“Win10系统一键关闭所有程序的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Win10系统一键关闭所有程序的方法是什么”吧!操作方法:右键单击鼠标新建一个快捷方式。...
    99+
    2023-06-27
  • 实时应用程序的关键:ASP、Linux和NumPy的集成方式是什么?
    在当今数字化时代,实时应用程序已经成为了我们生活中不可或缺的一部分。然而,这些应用程序的成功与否往往取决于它们的性能和稳定性。ASP、Linux和NumPy是三个关键的技术,它们的集成方式可以提高实时应用程序的性能和稳定性。 ASP是一种...
    99+
    2023-09-24
    linux numpy 实时
  • ASP.NET处理程序的执行方法是什么
    这篇文章主要介绍“ASP.NET处理程序的执行方法是什么”,在日常操作中,相信很多人在ASP.NET处理程序的执行方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ASP.NET处理程序的执行方法是什么...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作