我已經看到很多非常相似問題的答案,但他們似乎都訴諸于在函式末尾使用 sleep(1/n) 之類的方法,或者在某些情況下對函式計時并呼叫 sleep((1 /n) - 函式時間)。當然有更好的方法來做到這一點嗎?現代硬體可以訪問精確的硬體計時器,這些計時器可以每秒向 CPU 發送已知次數的中斷,是否沒有辦法利用這些計時器來運行功能,例如物理引擎更新已知的固定數量的來自用戶空間代碼的每秒次數?我特別想做的是,最好在 C 或 C 中,定義一些函式,我們稱之為 foo(),并指定它每秒被呼叫 N 次。我希望能夠知道,如果 M 秒過去了,
uj5u.com熱心網友回復:
沒有用于調度呼叫的標準 C API。
您可能想要一個單獨的執行緒,每 1/N 秒運行一次。
在 pthreads 世界中,這可以通過pthread_cond_timedwait. 該函式期望喚醒的絕對時間。此外,如果需要進行一些計劃外更新,一些其他執行緒可以使用條件變數喚醒它。
在 Windows 世界中,您可能需要其中一項WaitFor<whatever>功能。他們期望相對超時,因此您希望自己將絕對時間轉換為相對時間間隔。在這種情況下,另一個執行緒也可以喚醒您以執行緊急更新。
您需要的絕對時間只是前一次呼叫的絕對時間加上 1/N 秒。第一個可以設定為通話前的當前時間。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/366244.html
標籤:C
