程序严格循环不好吗?严格循环不好?
我有一个应用程序有一个游戏物理模拟器的两个线程。一个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