3

在 ubuntu 12.04 x64 主机上运行 KVM Windows 2008 RC2 x64 来宾时遇到了一些问题。具体来说,与时钟时间相比,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 秒。系统时钟总是非常准确。

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

4

1 回答 1

0

来自游戏计时和多核处理器

[...] 虽然 QueryPerformanceCounter 和 QueryPerformanceFrequency 通常针对多个处理器进行调整,但 BIOS 或驱动程序中的错误可能会导致这些例程在线程从一个处理器移动到另一个处理器时返回不同的值。因此,最好将线程保持在单个处理器上。[...]

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

于 2013-06-28T00:32:36.137 回答