在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秒。系统时钟总是非常准确。
关于可能导致这种情况的任何想法?
答案 0 :(得分:0)
来自Game Timing and Multicore Processors:
[...] QueryPerformanceCounter和QueryPerformanceFrequency 通常调整多个处理器,BIOS或驱动程序中的错误 可能会导致这些例程返回不同的值作为线程 从一个处理器移动到另一个处所以,最好保留线程 在一个处理器上。 [...]
系统时钟使用不同的机制来返回时间。以分辨率为代价,它通常更可靠。