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

解决方案 »

  1.   

    你一个thread给一个cpu还不够? 把一个thread放两个cpu上运行就不合算了
      

  2.   

    难道只能用这个方法吗?我是想要一个没有副作用的方法,比如我能指定函数获取哪个CPU的时间计数。
      

  3.   

    http://msdn2.microsoft.com/en-us/library/bb173458(VS.85).aspxGame Timing and Multicore Processors
    By Chuck Walbourn, Software Design EngineerXNA Developer Connection (XDC)December 2005
    没有完美的解决方法,但有可以使用的方法。