If my application crashes, I intercept the crash (using the function SetUnhandledExceptionFilter). In my crash handler, I create a mini dump file, and notify the user that his application has crashed. This notification is done via a MessageBox with the flag MB_TASKMODAL so the rest of the application is blocked.
Unfortunately, that doesn’t block the handling of repaint- and timer-messages. Especially the timer messagesare very annoying since they may execute all kinds of intermediate actions (depending on which plug-ins are loaded in my application), even saves to backup files, etc.
Is there an easy way to prevent Windows from sending repaint- and timer-messages(while showing the “you have crashed” popup)?
An alternative would be to use some global variable, that would be set in my crash handler, and checked in every place in my application where I would execute some logic, but this seems a rather ‘dirty’ and non-flexible solution to me.
Isn’t there an easier way? (and only making sure that the message loop of the message box only handles message box messages and no messages of other windows).
Thanx
Patrick
There is only one way to show a crash dialog safely – on a seperate thread created specifically for it. Creating a dialog on a crashed thread will cause all sorts of side effects (as you have noticed) as it will pump and dispatch both posted and sent messages destined for windows on that thread.
The question is – is it safe to create a dialog from within a crash handler? I can think of several scenarios where it could be problematic – especially if the global loader lock has been involved (i.e. a crash happens somewhere inside object initialization caused by a dll being loaded).
So its probably a good idea to create the thread on app startup and have it on standby.