我正在爲使用Qt的UI編寫一個模擬器,事件處理等等。顯然,我需要有一個準確的時間參考。現在,我用適當的時間間隔(NTSC爲16.66667ms,PAL爲20ms)使用QTimer,但正如預期的那樣,其準確性是可怕的。有時計時器以50 FPS發射,有時以120 FPS發射。Qt高分辨率定時器
我認識到,大多數操作系統具有一些功能,以提供精確的時間戳下到微(或納米)第二級。 (即在Windows上爲QueryPerformanceCounter
)。因爲我已經有了音頻輸出流,所以我不想使用系統時鐘,而是考慮與音頻時鐘同步,但我不認爲Qt提供了這種功能。
什麼是最簡單的(和/或最佳)的方式同步到一些精確的時鐘調用,在正常情況下,在特定的時間間隔的功能,很少有抖動,從C++/Qt的?
此答案符合傳聞。 Qt中的定時器觸發器與底層操作系統提供的定時器一樣好。它沒有更糟。沒有任何神奇的電話會讓事情變得更好。在Windows上,'usleep'和'msleep'具有相同的默認分辨率:15ms。當你用一個短暫的超時時間觸發一個定時器時,Qt會將全局窗口計時器的時鐘週期切換爲1ms,從而消耗功耗以實現定時器精度。沒有「事件」循環這樣的事情。每個線程都有自己的事件循環。沒有人強迫你在GUI事件循環中運行定時器。在單獨的高優先級線程中運行它們。 –