John Gwinner wrote:
That seems reasonable though - what messages aren't being responded to?
Apparently all message types have to be responded to in order to get Vista to treat an app as responsive (all or nothing philosophy). I think Microsoft did this because, while an app is technically responsive by checking for even a small category of messages, they want the app's window to be moveable, resizable, etc. so that the user doesn't get ANY impression of non-responsiveness whatsoever. This is in keeping with the modern idea that no matter what an app is doing, the GUI should always respond to the user. MS could ask developers nicely, but I guess too many of them weren't listening, so MS is preferring the stick over the carrot. e.g., Apple goes overboard to make sure that their software doesn't appear stuck no matter what it's doing. They put all rendering onseparate threads, etc. You can scroll a rich display and keep doing so even if the display takes a while to draw -- it just tracks the stale areas and gets around to them whenever it can, showing blank areas or low-res proxies in the meantime. A good example is Google Maps.
This is easy in viewer apps but gets trickier in modelers, because the user could be changing the very data that the renderer is drawing -- if the drawing takes time, and the user changes something, now the drawing is pointless and has to start over (or you'll wind up with a display that has some invalid combination of current and out-of-date regions). A simple fix is to simply disable all modeling functions until drawing completes, and that's under consideration.
I'm always a little leery of threading because it introduces non-deterministic effects into software (i.e., debugging can become hellish if threads are not done right), but I'm a lot comfier with them
than I used to be, so I will be aiming for better responsiveness as time goes on. Ray