2009-11-13 23 views
1

我的印象是,QueryPerformanceCounter實際上正在訪問提供HPET(高性能事件定時器)的計數器---當然差別在於HPET是一個定時器當計數器值與期望的時間間隔匹配時發送中斷,而爲了使定時器「脫離」QueryPerformanceCounter,則必須用軟件編寫自己的循環。QueryPerfomanceCounter返回的計數的時鐘源是什麼

我認爲硬件背後的唯一原因是相同的,因爲我讀過QueryPerformanceCounter訪問芯片組計數器的地方。

http://www.gamedev.net/reference/programming/features/timing/聲稱QueryPerformanceCounter使用明顯具有指定時鐘頻率的芯片組計時器。但是,我可以驗證QueryPerformanceFrequency在不同的計算機上返回的數字大致不同,實際上,從啓動到啓動的數量可能會稍有變化。

返回的數字有時可能是完全荒謬的 - 暗示在納秒範圍內的蜱。當然,放在一起的時候一切都會奏效。也就是說,使用QueryPerformanceCounter/QueryPerformanceFrequency編寫定時器軟件可以讓您獲得適當的時間,並且延遲非常低。

使用這些函數的軟件定時器可能相當不錯。例如,間隔1毫秒,超過30秒,很容易將接近100%的滴答落入預期間隔的10%以內。在100微秒的時間間隔內,您的成功率仍然很高(99.7%),但最差的時鐘可能會停止(200微秒)。

我想知道HPET背後的時鐘是否相同。假設HPET應該仍然會提高準確性,因爲它是一個硬件定時器,但至今我不知道如何在Windows中訪問它。

+0

順便說一下,我的測試全部在Windows XP(32位)下運行, – pelesl 2009-11-13 20:20:22

回答

0

你嘗試更新CPU驅動程序爲您的AMD多核系統?你有沒有檢查你的主板芯片組是否在「壞」列表中?你有沒有嘗試設置CPU親和力?

也可以使用基於RTC的時間函數和/或跳過檢測啓發式來消除QPC的麻煩。

這有一些提示:CPU clock frequency and thus QueryPerformanceCounter wrong?

請改善這一點。這是一個社區wiki。

相關問題