我已經看到很多非常相似問題的答案,但他們似乎都訴諸於在函數末尾使用 sleep(1/n) 之類的方法,或者在某些情況下對函數計時並調用 sleep((1 /n) - 函數時間)。當然有更好的方法來做到這一點嗎?現代硬件可以訪問精確的硬件計時器,這些計時器可以每秒向 CPU 發送一些已知次數的中斷,有沒有辦法利用這些計時器來運行功能,例如物理引擎更新已知的固定數量的來自用戶空間代碼的每秒次數?我特別想做的是,最好是在 C 或 C++ 中,定義一些函數,我們稱之為 foo(),並指定它每秒被調用 N 次。我希望能夠知道,如果 M 秒過去了,
沒有用於調度調用的標準 C API。
您可能想要一個單獨的線程,每 1/N 秒運行一次。
在 pthreads 世界中,這可以通過pthread_cond_timedwait
. 該函數期望喚醒的絕對時間。此外,如果需要進行一些計劃外更新,一些其他線程可以使用條件變量喚醒它。
在 Windows 世界中,您可能需要其中一項WaitFor<whatever>
功能。他們期望相對超時,因此您希望自己將絕對時間轉換為相對時間間隔。在這種情況下,另一個線程也可以喚醒您以執行緊急更新。
您需要的絕對時間只是前一次調用的絕對時間加上 1/N 秒。第一個可以設置為通話前的當前時間。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句