Java 锁定游戏更新速度导致CPU使用率高。当我什么都不做的时候,如何让线程睡眠?
所以我目前正在学习如何做到这一点,有人说代码效率低下,因为当没有任何更新时线程仍在运行。当我在任务管理器中查看CPU使用情况时,当只渲染一个黑屏时,CPU列中的CPU使用率高达35-45%,CPU列中的CPU使用率高达20%。当CPU不更新任何内容时,有没有办法使线程休眠 谢谢Java 锁定游戏更新速度导致CPU使用率高。当我什么都不做的时候,如何让线程睡眠?,java,Java,所以我目前正在学习如何做到这一点,有人说代码效率低下,因为当没有任何更新时线程仍在运行。当我在任务管理器中查看CPU使用情况时,当只渲染一个黑屏时,CPU列中的CPU使用率高达35-45%,CPU列中的CPU使用率高达20%。当CPU不更新任何内容时,有没有办法使线程休眠 谢谢 public void run() { long lastTime = System.nanoTime(); long timer = System.currentTimeMillis(); f
public void run() {
long lastTime = System.nanoTime();
long timer = System.currentTimeMillis();
final double ns = 1000000000.0 / 60.0;
double delta = 0;
int frames = 0;
int updates = 0;
while (running) {
long now = System.nanoTime();
delta += (now - lastTime) / ns;
lastTime = now;
while(delta >= 1) {
update();
updates++;
delta--;
}
render();
frames++;
if(System.currentTimeMillis() - timer > 1000) {
timer += 1000;
updates = 0;
frames = 0;
}
}
stop();
}
唯一好的方法是执行yourThread.wait,当游戏停止执行操作时,然后执行yourThread.notify,当游戏再次执行操作时。您不应该在自己的线程上渲染。SWING是线程不安全的,因此所有GUI操作都应该在SWING线程上进行。正好SWING有一根专门为它做的线
timer = new javax.swing.Timer(1000 / 60, this);
timer.start();
@Override
public void actionPerformed(ActionEvent e) {
// Do your stuff (ignore 'e')
}
@Acecle Np,如果这有帮助,我很高兴。如果这个问题有帮助的话,也别忘了把它标记为已接受。这不是什么。开始。它只用于第一次启动线程,而不是中断睡眠调用。@DanGetz噢,我的糟糕!我会改正的这是错的。如果你不理解主题,就不应该写答案。因为OP没有提到他们使用的框架,这比回答更好,因为我看到了渲染和60 fps,并且代码风格,这是一个有根据的猜测。但它仍然只是一个猜测-渲染可以使用缓冲策略或其他框架…最好要求澄清,避免潜在的否决票;作为参考,这看起来很像OP的代码,当你不更新任何东西时,通过事件驱动而不是简单地坐在一个紧密的循环中,你会使线程休眠。计算渲染/更新帧所需的时间与你可能需要休眠的时间之间的差,即大约16毫秒60帧,然后通过thread.sleep休眠为了区别。。。