2

我通常使用类似于这样的主“while”循环在 Java 中编写(小型)游戏:

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

我这样做是为了使程序每秒具有最大帧数,但我听说 Thread.sleep 允许其他线程执行。我应该添加 Thread.sleep(1) (或其他一些低毫秒数)以允许计算机上的其他线程吗?这更像是一个良好的编程实践问题而不是性能问题,而且这并不是真正必要的,但我喜欢制作可靠且不贪心的程序。

4

2 回答 2

4

不,你不需要这样做。

所有现代的抢先式多任务系统都将时间分配给其他线程以允许它们执行。您不需要sleep()适应这一点,除非您想在一段时间内强制放弃对其他线程的控制。

您唯一可能想要这样做的情况是,如果您在多核系统上占用所有内核,并且您希望在后台安静地完成一个长时间运行的计算密集型任务,而不会明显影响正在发生的其他操作同时。

于 2012-06-30T22:48:37.747 回答
4

我已经成功构建了使用Timer更新图形的游戏。阅读这里的好处。但总的来说,罗伯特是正确的,您不需要这样做。我发现这通常归结为找到游戏动画 FPS 的最佳点,而不是对其他进程友好。

于 2012-06-30T22:53:39.113 回答