Another Timing (QPC) gotcha
I've searched the forum on this and haven't found a mention, so I thought I'd let others who haven't encountered this problem before know that it exists.
The story is that the performance timer may return unreliable values on dual core machines. I stumbled across it when a dual core setup was returning sluggish player input and uncapped frame rates (when they should have been capped).
The quick solution is to SetThreadAffinityMask(GetCurrentThread(), 1); on the main game thread.
"Finally while the QueryPerformanceCounter / QueryPerformanceFrequency API is intended to be multiprocessor aware, bugs in the BIOS or motherboard drivers may result in these routines returning different values as the thread moves from one processor to another. We recommend that all game timing be computed on a single thread, and that thread is set to stay running on a single processor through the SetThreadAffinityMask Windows API. Typically this would be the main game thread. All other threads should be designed to operate without gathering their own timer data. We do not recommend using a 'worker' thread to compute timing as this will become a synchronization bottleneck. It is recommended that worker threads are designed to read timestamps from the main thread. Since the worker threads only read the timestamp there is no need to use critical sections. We also do not recommend have multiple threads compute timing and associating each with a specific processor, as this will greatly reduce the throughput on multicore systems."