2012-06-30 28 views
2

我通常用Java編寫(短小的)比賽採用主「而」循環有點像這樣:我應該使用Thread.sleep對其他程序很好嗎?

while(running) { 
    time = getTime(); 
    if(time - oldTime > 0.01) { 
     tick(time - oldTime); 
     oldTime = getTime(); 
    } 
} 

我這樣做是爲了使程序具有每秒幀的最大數目,但我聽說Thread.sleep允許其他線程執行。我應該添加一個Thread.sleep(1)(或其他一些微妙的毫秒數)以允許計算機上的其他線程?這更多的是一個良好的編程實踐問題,而不是性能問題,並不是真的有必要,但我喜歡制定可靠和不合理的程序。

+0

嗯,這取決於。你打算在你的遊戲運行時做一些其他繁重的計算嗎? – Tudor

回答

4

不,你不需要這樣做。

所有現代搶先式多任務系統都會將時間分配給其他線程以允許它們執行。你不需要sleep()來適應這一點,除非你想在一段時間內強制放棄對其他線程的控制。

您可能想要這樣做的唯一時間是,如果您佔用多核系統上的所有內核,並且您希望長時間運行,計算密集型任務在後檯安靜地完成而不會產生明顯影響其他業務同時進行。

+0

此外,Thread.sleep()只會影響同一虛擬機中的其他線程。不是其他應用程序對於其他應用程序,OS調度程序可能足以確保公平性。 – Jochen

4

我已經成功構建使用Timer更新圖形的遊戲。閱讀here的好處。一般來說,Robert是正確的,你不需要需要來做到這一點。我發現通常歸結爲在遊戲動畫FPS中找到一個甜蜜點,而不是對其他流程很好。

+0

參見[*在Swing應用程序中使用計時器*](http://java.sun.com/products/jfc/tsc/articles/timer/)。 – trashgod

相關問題