2013-12-17 39 views
0

爲什麼遊戲循環需要睡覺,你如何確定多久?你如何保持線程的睡眠時間不變?爲什麼遊戲循環需要睡眠?

+1

因爲它像其他人一樣累了...歡迎來到SO。 *請爲您的問題添加更多背景*。有了這些信息,將很難爲您提供相關提示。一個典型的例子是,你有某種交互/動畫會運行得如此之快,以至於用戶在沒有睡眠聲明的情況下將無法遵循。 – reto

回答

1

操作系統通常會在任何給定的內核上同時運行大量線程/進程,並且調度程序必須決定每個進程得到多少處理器時間。如果線程連續運行(沒有睡眠),它可能最終佔據可用處理器資源。

有時這是合適的,例如,用於計算密集型應用。但是,大多數程序不應該這樣做。特別是對於遊戲,瓶頸通常是圖形或IO性能,而不是可用的CPU資源(即,您的程序最終可能會浪費處理器時間,同時等待其他內容追趕)。

讓您的線程在每次迭代中短暫休眠一段時間,釋放一些處理器時間。這可以讓調度程序爲其他線程/進程分配時間,並使系統運行得更好。從本質上講,睡眠時間是爲了系統的其他部分,而不是你自己的程序。

這樣的睡眠時間並沒有真正的「正確」量。一般來說,你的線程應該儘可能長時間地睡覺而不會影響程序的性能。一個很好的方法是確定遊戲所需的幀速率,然後計算每幀之間可以承受的延遲量。

每次檢查主循環時,檢查自上一幀以來是否已經過去了這段時間。如果不是,睡一會兒,然後在下一次循環時再試一次。