2013-06-18 69 views
3

我在ubuntu 12.04 x64主機上運行KVM Windows 2008 RC2 x64 guest虛擬機時遇到了一些麻煩。具體來說,與時鐘時間相比,Win32調用QueryPerformanceCounter似乎週期性地產生不可靠的結果。我運行一個循環與此類似:KVM Windows 2008 RC2 guest虛擬機上不可靠的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和日期時間::瘦包裝NOW()使用系統時鐘。定期說,至少每3分鐘一次,三角洲約爲42秒。系統時鐘總是非常準確。

關於可能導致此問題的任何想法?

+0

你如何確定每秒鐘的滴答? –

+0

QueryPerformanceFrequency。上面我使用英特爾tbb庫,它爲我處理,但我也嘗試過直win32以及。 – samwise

+0

使用QueryPerformanceCounter()時存在各種錯誤,請參閱[Python PEP關於不同的時間函數](http://www.python.org/dev/peps/pep-0418/#windows-queryperformancecounter)。不要指望它在所有條件下都是100%可靠的。 – scai

回答

0

Game Timing and Multicore Processors

[...]雖然QueryPerformanceCounter和QueryPerformanceFrequency的 通常調整多個處理器,在BIOS錯誤或驅動程序 可以導致這些例程返回不同的值作爲線程 移動一個處理器到另一個。因此,最好將線程 保留在單個處理器上。 [...]

系統時鐘使用不同的機制來返回時間。以解決方案爲代價通常更可靠。

相關問題