【BUG之旅】程序不能退出问题

窗口A创建两个线程T1,T2,在OnClose函数中调用了TerminateThread结束这两个线程,发现最后程序没有正常返回。最后定为是这个函数没有正常结束线程。

之后改用设定标志位让进程自己退出的方法,在软件中产生了死锁。

//A线程 其中有一部分代码

while(!bExit)

{

......

UpdateWindow();

}

bExitSuccess  = TRUE;

//主线程中设定A的退出标志

bExit = TRUE;

while(!bExitSuccess);

会有某一个时刻,bEixt = TRUE时运行到UpdateWindow();这里UpdateWindow();是一个阻塞函数,A等待主线程处理WM_PAIT消息。而现在主线程正在处理WM_CLOSE消息,导致死锁。

解决了死锁问题。就可以直接用WaitForSingleObject来等待线程返回,这样更加优雅点

时间: 2025-01-04 04:52:43

【BUG之旅】程序不能退出问题的相关文章

C#关于软件界面无响应、BUG报警、程序异常退出等情况的监控和报警

对程序的监控,一般采用另外一个进程进行监控(即主进程和监控进程),主进程运行后,先查找下看有没有还在残留运行的监控进程,如果有先结束监控进程,然后重新启动. 如何监控主程序的思路是:主程序中开辟一个共享内存映射文件,通过定时器向文件写入变化的信号数据(自定义).监控程序定时从共享内存文件中读取信号数据,并和上次读取的信号数据进行对比,如果不一致表示主程序运行正常,如果不一致,表示运行异常或者程序异常退出. 内存映射文件 内存映射文件是由一个文件到进程地址空间的映射. C#提供了允许应用程序把文件

Linux C程序异常退出怎么办——core文件帮你忙

想必你一定遇到过Linux下程序异常退出的问题,异常退出貌似有一种神奇的魔力,会让你神经突然紧张.不要怕,Linux是很强大的,在程序退出的时候,会在可执行文件所在的目录生成一个core文件,它很好地记录了一些神秘而又必要的东西,帮助你定位到错误的根源,想想以前面试的时候人家闻到core文件,我答不上来,你说面试官会怎样想,那么就来说说core文件. core文件实际上就是一个内存映象同时加上一些调试信息. 首先,你得打开系统的core文件生成开关吧,终端中输入ulimit -c命令,若显示0表

独辟蹊径之android程序完全退出的一种途径

最近做一个项目时,意外发现了一种可以让android程序完全退出的一种途径,遥想当年为了找到一种有效地途径让android程序完全退出时的窘迫,不由得有些感慨.这里不敢独享,和大家分享一下,也是抛砖引玉,希望有大牛出来继续探讨一下这个问题. 方法很简单,其实就是一层窗户纸,知道了,就明白了.用jni调用linux系统调用exit即可.下面给出具体实现: package com.example.bitmaptest; import android.util.Log; public final cl

C# 窗口和程序的退出

Application.Exit(); // 通知所有消息泵必须终止,并且在处理了消息以后关闭所有应用程序窗口. // 由 .NET Compact Framework 支持. Form.Close(); //关闭窗口(主程序还没有退去) 要点: 1.程序从Application.Run(new   Form1)开始,到Application.Exit()结束,销毁窗体,回收资源. 这之中,如果你打开了1个窗体,两个语句就是一样,如果打开多个,比如你Form1里又开了form2,form3等等,

应用程序完全退出

前言 在Android应用程序的完全退出有点麻烦,系统没有提供完全退出的api. 退出单Activity程序 Android系统中提供了以下的方式来退出单Activity的应用程序,如下所示 Process.killProcess(Process.myPid()); System.exit(0); 退出多Activity程序 上一小节提到了退出单个Activity的方式,然而实际开发中很少有单个Activity的应用程序,而多个Activity的应用程序完全退出又不能直接退出,下面的方式通过记录

iphone按home键后,正在运行的程序是否退出了呢?

是否一直有个疑问,当iphone手机正在运行一个APP,如果按Home键后,那么原来正在运行的程序还在运行吗?如果开发过ios程序,可能不是问题,如果没有开发过的,可能会疑惑了,我就简单的说一下.以几个问题的形式来说明,以正在运行QQ为例. 1.为什么按home键后,长时间不操作,再启动qq的话,会重新运行qq(没有回到原来的状态)? 答:iphone实际上是伪后台,按home键后,程序就退出了.所以我们iphone中使用的程序一般都没有退出键. 试想一下,如果程序有退出键的话,那么当程序无响应

关于C#程序无故退出

今天我发现一种情况,分享下 我一个对象是用多线程写的代码,主程序调用完后有时候也会退出,catch不到.我在原对象的接口里面加上lock之后就ok了!我的理解是该对象申请的资源没释放完毕,加lock后释放完该资源再执行其他就好了 关于C#程序无故退出,布布扣,bubuko.com

android捕获程序异常退出

今天看到迅雷动漫里面一个CrashHandler 的类,我猜是崩溃处理类.进去一看,果然.顺便学习一下. Android系统的"程序异常退出",给应用的用户体验造成不良影响.为了捕获应用运行时异常并给出友好提示,便可继承UncaughtExceptionHandler类来处理.通过Thread.setDefaultUncaughtExceptionHandler()方法将异常处理类设置到线程上即可. 代码: public class CrashHandler implements Un

Android企业级程序完全退出的解决方案

一.问题描述 在平常开发的过程中可以发现,很多开发者对于程序的退出都没有去认真的解决.一般要么是一个简单的finish(只是退出当前的activity),要么是其他的方法,比如: 1.第一种方法:首先获取当前进程的id,然后杀死该进程: android.os.Process.killProcess(android.os.Process.myPid()): 2.第二种方法:终止当前正在运行的Java虚拟机,导致程序终止:System.exit(0); 3.第三种方法:强制关闭与该包有关联的一切执行

Windows应用程序的退出

Windows应用程序的退出 flyfish OnOK OnCancel EndDialog的关系 VC\atlmfc\src\mfc\dlgcore.cpp文件中 void CDialog::OnOK() { if (!UpdateData(TRUE)) { TRACE(traceAppMsg, 0, "UpdateData failed during dialog termination.\n"); // the UpdateData routine will set focus