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 分に 1 回、デルタは約 42 秒です。システムクロックは常にかなり正確です。

これを引き起こしている可能性のあるアイデアはありますか?

4

1 に答える 1

0

ゲームのタイミングとマルチコア プロセッサから:

[...] QueryPerformanceCounter と QueryPerformanceFrequency は通常、複数のプロセッサに合わせて調整されますが、BIOS またはドライバのバグにより、スレッドがあるプロセッサから別のプロセッサに移動すると、これらのルーチンが異なる値を返す場合があります。そのため、スレッドを単一のプロセッサに保持するのが最善です。[...]

システム クロックは、別のメカニズムを使用して時間を返します。一般に、解決を犠牲にしてより信頼性が高くなります。

于 2013-06-28T00:32:36.137 に答える