C++ C++;异常处理程序问题
我编写了一个异常处理程序例程,帮助我们发现软件中的问题。我用C++ C++;异常处理程序问题,c++,windows,exception,dialog,handler,C++,Windows,Exception,Dialog,Handler,我编写了一个异常处理程序例程,帮助我们发现软件中的问题。我用 SetUnhandledExceptionFilter(); 捕获任何未捕获的异常,它工作得非常好 但是,我的处理程序弹出一个对话框,要求用户详细说明崩溃时他们在做什么。这就是问题所在,因为对话框与崩溃处于相同的线程上下文中,所以对话框继续输出应用程序的消息。这给我带来了一个问题,因为我们的一个崩溃发生在WM_定时器中,它每分钟都会响。你可以想象,如果对话框在屏幕上出现超过一分钟,一个WM_定时器被调度,应用程序重新崩溃。在这种情况
SetUnhandledExceptionFilter();
捕获任何未捕获的异常,它工作得非常好
但是,我的处理程序弹出一个对话框,要求用户详细说明崩溃时他们在做什么。这就是问题所在,因为对话框与崩溃处于相同的线程上下文中,所以对话框继续输出应用程序的消息。这给我带来了一个问题,因为我们的一个崩溃发生在WM_定时器中,它每分钟都会响。你可以想象,如果对话框在屏幕上出现超过一分钟,一个WM_定时器被调度,应用程序重新崩溃。在这种情况下重新输入异常处理程序是个坏消息
如果我让Windows处理崩溃,Windows会显示一个似乎正常工作的对话框,但会阻止消息传播到应用程序的其余部分,因此不会重新发出WM_计时器
有人知道我怎样才能达到同样的效果吗
谢谢
Rich当检测到未处理的异常时,或许可以使用
CreateProcess()
启动单独的数据收集过程。这个单独的过程将提示用户输入他们刚刚做的事情的信息,而您的主应用程序可能会继续崩溃并终止
或者,如果您不想启动另一个进程,可以使用单独的消息队列创建另一个线程,当对话框在屏幕上时,它会阻止主线程执行任何操作。当主线程被阻止时,它将没有机会处理
WM\u TIMER
消息。在第二个线程中显示对话框。
我或多或少遇到了同样的问题(但必须显示一个消息框而不是一个对话框)
- 编写一个类,在其中使用Win32 CreateEvent函数创建两个事件。一个事件(触发器)用于触发对话框,一个事件(就绪)用于发出对话框已处理的信号
- 向类中添加一个方法“execute”,并在第二个线程中启动该方法
- 让“execute”方法等待,直到设置了触发器事件,如果设置了,则显示对话框
- 处理对话框后,设置“就绪”事件
- 如果应用程序在主线程中崩溃,请为对话框准备一些信息(通过类中的setter)并设置“trigger”事件,然后等待“ready”事件。触发器事件的设置将激活第二个线程,主线程将阻塞,直到第二个线程设置了“就绪”事件