KVM Windows 2008 RC2 guest虚拟机上的QueryPerformanceCounter不可靠

时间:2013-06-18 16:58:14

标签: linux windows kvm

在ubuntu 12.04 x64主机上运行KVM Windows 2008 RC2 x64 guest虚拟机时出现问题。特别是与时钟时间相比,Win32调用QueryPerformanceCounter似乎会定期产生不可靠的结果。我正在运行类似于此的循环:

auto zero = tbb::tick_count::now ();
while (true) {
  std::cout << datetime::now () 
            << " delta: " << (tbb::tick_count::now () - zero).seconds () 
            << std::endl;
  zero = tbb::tick_count::now ();
  Sleep (1000);
}

上面,tbb :: tick_count是QueryPerformanceCounter上的一个瘦包装器,datetime :: now()使用系统时钟。定期地,至少每3分钟说一次,三角洲约为42秒。系统时钟总是非常准确。

关于可能导致这种情况的任何想法?

1 个答案:

答案 0 :(得分:0)

来自Game Timing and Multicore Processors

  

[...] QueryPerformanceCounter和QueryPerformanceFrequency   通常调整多个处理器,BIOS或驱动程序中的错误   可能会导致这些例程返回不同的值作为线程   从一个处理器移动到另一个处所以,最好保留线程   在一个处理器上。 [...]

系统时钟使用不同的机制来返回时间。以分辨率为代价,它通常更可靠。