After having fixed my first batch of Vista-specific failures in our tools, I decided to explore what’s new in the OS.
Mainly I went looking for an API that would prevent Vista from thinking my GUI application is hung when it's not. More on that later. Note: I don't have this issue on Windows XP where hang detection also exists.
Here's what found while exploring the docs, lumped into 3 rough categories:
Transactional NTFS and registry, with a generalized kernel API they will no doubt continue to extend. I can imagine uses for this, here today.
Kernel object namespace isolation, hides your handles from other people.
Application error logging, reporting, restarting. The logging part is a total *yaaawner*, but the restarting bit is interesting because it works even across reboots.
Light(er)-weight thread pooling, with a ton more control. For sure OpenMP will make use of this.
User-mode condition variable and wait chain traversal. I'm not sure I was clamoring for condition variables, though Pthreads might influence me negatively on this one. Wait chain traversal sounds like a good solution for a narrow problem space, that's ok.
Thread ordering, a new neat “enforced fairness” mechanism for a subset of user threads
Improved NUMA allocations, which will come in handy for multi-socket AMD boxes.
One-time initialization (e.g. statics), mostly a compiler-oriented feature for C++ and OpenMP.
- Symbolic links (at last), it’s been in NTFS for a long time (for directories) but didn’t have a Win32 API to control them.
Overall then, I would say the “Spirit of Vista” ('s kernel) is multi-core support. Even the transaction features are part of this in my opinion.
It’s pretty clear that there is more that is new in Vista than there was in XP. I think the only XP-specific kernel facilities I ever used were Vectored Exception Handling and GetModuleHandleEx (both in conjunction with Debug Help libraries, which are not XP specific). Ditto for Windows Vista vs Windows 2000, Vista is more significant from an API standpoint.
Overall I think I have warm fuzzy feelings about Vista. It'll really shine after a service pack or two. I'm looking forward to SP1.
About my application hang? I don't have compute-bound work in my UI thread. The UI thread is not hung. Yet after about a minute of 100% CPU utilization in the compute thread, if no UI update has taken place (because none was needed), Vista decides my application is going nowhere and should be ended. I hope Vista isn't doing what I really think it's doing... :^/
So I didn't find a solution per-se, but I think I have figured a work-around. Surely I'm not the only guy who's hit this, but Googling for this topic yields nothing. Feel free to drop me a note if you know something.