我编写了一个异常处理程序例程,可以帮助我们发现软件问题。我用
SetUnhandledExceptionFilter();
捕获任何未捕获的异常,并且效果很好。
但是,我的处理程序弹出一个对话框,要求用户详细说明崩溃时他们在做什么。这就是问题所在,因为该对话框与崩溃位于同一线程上下文中,所以该对话框继续发送应用程序消息。这给我带来了一个问题,因为我们的一次崩溃是在WM_TIMER中,该崩溃每分钟发生一次。您可以想象,如果对话框在屏幕上已经存在一分钟以上,则会调度WM_TIMER并重新崩溃应用程序。在这种情况下重新进入异常处理程序是个坏消息。
如果让Windows处理崩溃,Windows将显示一个似乎起作用的对话框,但会停止将消息传播到应用程序的其余部分,因此不会重新发出WM_TIMER。
有谁知道我能达到同样的效果?
谢谢
富有的
最佳答案
检测到未处理的异常时,也许可以使用CreateProcess()
启动单独的数据收集过程。这个独立的过程将提示用户输入有关他们正在做什么的信息,而您的主应用程序可能会继续崩溃并终止。
另外,如果您不想启动另一个进程,则可以创建带有单独消息队列的另一个线程,该线程会在对话框显示在屏幕上时阻止您的主线程执行任何操作。当您的主线程被阻止时,它将没有机会处理WM_TIMER
消息。