我编写了一个异常处理程序例程,帮助我们解决软件问题。我用
SetUnhandledExceptionFilter();
捕捉任何未捕获的异常,并且效果很好。
然而,我的处理程序弹出一个对话框,要求用户详细说明他们在崩溃时正在做什么。这就是问题出现的地方,因为对话框与崩溃在同一个线程上下文中,对话框继续抽取应用程序的消息。这导致了一个问题,因为我们的一个崩溃是在WM_TIMER中,每分钟都会发生。您可以想象如果对话框已在屏幕上显示超过一分钟,则会调度WM_TIMER并重新崩溃应用程序。在这种情况下重新进入异常处理程序是个坏消息。
如果我让Windows处理崩溃,Windows会显示一个似乎正常运行的对话框,但会停止传播到应用程序其余部分的消息,因此WM_TIMER不会重新发布。
有谁知道我怎么能达到同样的效果?
由于 富
答案 0 :(得分:2)
当您检测到未处理的异常时,也许可以使用CreateProcess()
启动单独的数据收集过程。这个单独的过程会提示用户输入有关他们刚刚做什么的信息,而主应用程序可能会继续崩溃并终止。
或者,如果您不想启动另一个进程,则可以使用单独的消息队列创建另一个线程,这会阻止主线程在对话框打开时执行任何操作屏幕。当您的主要线程被阻止时,它将无法处理WM_TIMER
条消息。
答案 1 :(得分:0)
在第二个帖子中显示对话框。 我或多或少有同样的问题(但必须显示一个消息框而不是一个对话框)。