QueryPerformanceCounter() 不问要哪个处理器的计数,直接返回一个。多个处理器的计数可以不同。
又,一个进程或者线程可以和数个处理器关联,所以在程序内,执行同一个QueryPerformanceCounter()的处理器可以有多个。
所以结果是,如果一个进程/线程和多个处理器关联,那么同一个QueryPerformanceCounter()调用返回的结果可能不是基于同一个处理器的,结果可能出现偏差。现在想到的方法只有用SetThreadAffinityMask()函数把线程和单一处理器关联,不过这样的话可能对单个线程的处理能力有所影响。
多个线程的同步计时还没办法解决,因为如果把一个进程和单一处理器关联,就没办法利用多个处理器了,程序速度会下降很多。
又,一个进程或者线程可以和数个处理器关联,所以在程序内,执行同一个QueryPerformanceCounter()的处理器可以有多个。
所以结果是,如果一个进程/线程和多个处理器关联,那么同一个QueryPerformanceCounter()调用返回的结果可能不是基于同一个处理器的,结果可能出现偏差。现在想到的方法只有用SetThreadAffinityMask()函数把线程和单一处理器关联,不过这样的话可能对单个线程的处理能力有所影响。
多个线程的同步计时还没办法解决,因为如果把一个进程和单一处理器关联,就没办法利用多个处理器了,程序速度会下降很多。
By Chuck Walbourn, Software Design EngineerXNA Developer Connection (XDC)December 2005
没有完美的解决方法,但有可以使用的方法。