遊戲中限制幀速的新方法 (轉)

worldblog發表於2007-12-10
遊戲中限制幀速的新方法 (轉)[@more@]

以前很多資料介紹的方法都是使用GetTickCount/或者是多定時器,來輪訓時間,精度確實不錯。
但是這樣會造成時間的極大浪費,一個主要表現就是在nt/2000環境中後臺反應極慢。
如果可以使用像 wait之類的方法來實現,那麼在等待時間訊息時,執行緒掛起,cup資源浪費較少。這樣就不會出現後臺程式掛起的問題了。

幸運的是,win32在98以後的版本都提供了waitable timer來等待time event。
具體使用方法請參考msdn。

這裡要說的是,waitable timer預設的精度是1/50秒,達不到60fps的要求。
查閱msdn也沒有發現有可以設定時間精度的。

後來在一個偶然的機會我發現timerBeginPeriod()函式設定多媒體時間精度會影響到Waitable timer。
猜想Waitable timer內部是使用了多媒體時鐘來實現的。
透過設定timerBeginPeriod(8)就可以得到每秒60的時間訊息了。
更大的值會使得cpu佔用大大提高,所以建議只要設定到需要的精度即可。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990877/,如需轉載,請註明出處,否則將追究法律責任。

相關文章