Re: How to current close window while messages still in queue
On Tue, 04 Nov 2008 15:32:03 -0500, Joseph M. Newcomer
<newcomer@flounder.com> wrote:
Well, I don't see the shutdown as "disorderly" because I know that *I* am done with the
thread, and what happens to it after that is pretty irrelevant; and I wouldn't block on
the thread handle because I don't see what good that does to me. I won't continue the main
thread shutdown until the thread tells me that it has finished, at the level of being
about to return from the top-level thread function. Nothing else critical happens after
that point. I ensure that all threads have reached the point of returning from the
top-level thread function before allowing the application shutdown.
Considering just program shutdown for the moment, after you've received
your "terminated" message from a CWinThread, it continues to run code you
didn't write. I traced through some of it in this message I wrote to you in
2006:
http://groups.google.com/group/microsoft.public.vc.mfc/msg/c6184946854e4a56?hl=en
Therefore, unless you've turned off auto-delete and waited on the thread
handle as I described, the thread will continue to run and delete the
CWinThread object (or not; it depends on how far it gets) at some random
point during program shutdown, and "randomness" and "robustness" are
normally orthogonal when it comes to multithreaded programming. There is
more to a CWinThread than the function you write, and the approach you've
described is not robust. It can be made robust by applying the techniques I
described here:
http://members.cox.net/doug_web/threads.htm
In particular, to make the PostMessage(UWM_THREADEXITED) method robust, see
Q8.
--
Doug Harrison
Visual C++ MVP