程序嚴格循環不好嗎?嚴格循環不好?
我有一個應用程序有一個遊戲物理模擬器的兩個線程。一個updateGame線程和一個呈現線程。渲染線程通過讓線程休眠幾毫秒(以實現我想要的幀速率)和updateGame線程(基於某些物理方程更新我在遊戲對象位置中)而受到限制,它先前被10毫秒的睡眠。
但是,我最近沒有去調整updateGame線程,並且模擬我的對象移動似乎更加現實,因爲我已經取出了10ms的睡眠時間。熱循環不好還是有緊縮循環?
private class UpdateTask implements Runnable
{
private long previousTime = System.currentTimeMillis();
private long currentTime = previousTime;
private long elapsedTime;
public void run()
{
while(true)
{
currentTime = System.currentTimeMillis();
elapsedTime = (currentTime - previousTime); // elapsed time in seconds
updateGame(elapsedTime/1000f);
try {
Thread.currentThread().sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
previousTime = currentTime;
}
}
}
在這個例子中,我只是睡了1毫秒(從我的理解有多麼毫秒準確性和休眠功能的工作原理這可能更像是5-10ms。如果我睡任何超過這個啓動有撞擊我的碰撞檢測和物理模型的準確性。
它是一個不好的做法,有緊密的循環,或在他們1ms的休眠循環?有別的我應該做的呢?
你應該使用'的Thread.sleep(...)的``而不是Thread.currentThread()。睡眠(。 ..)`因爲這是一個靜態方法;你的代碼可能會誘使你執行`someOtherThread.sleep(...)`,它不會睡眠`someOtherThread`。 – newacct 2009-09-19 04:40:48