Java-Thread.sleep内部运行方法

用户3421485

我正在学习一个教程,下面是用于生成逻辑和框架更新的run方法。我了解滴答声如何更新为每秒60个滴答声,但是我不明白我们如何在此处每秒调节帧数。

现在,使用Thread.sleep(2),每秒的帧数约为460。如果没有它,这个数字将会上升,每秒约有1000万次更新。代码Thread.sleep(2)仅将线程挂起2毫秒,对吗?为什么/如何在这里将Thread.sleep完全起作用以将其降低到如此低的水平?

创建nsPerFrame = 1000000000D /(FPS)D来设置我想要的滴答作答的FPS难道不是很简单吗?

public void run(){
    long lastTime = System.nanoTime();
    double nsPerTick = 1000000000D / 60D;

    int frames = 0;
    int ticks = 0;

    long lastTimer = System.currentTimeMillis();
    double delta = 0;

    while(running){
        long now = System.nanoTime();
        delta += (now - lastTime) / nsPerTick;
        lastTime = now;

        while(delta >= 1){
            ticks++;
            tick();
            delta-= 1;
        }

        try{
            Thread.sleep(2);
        } catch(InterruptedException e){
            e.printStackTrace();
        }

        frames++;
        render();

        if(System.currentTimeMillis() - lastTimer >= 1000){
            lastTimer += 1000;
            System.out.println(ticks + "," + frames);
            frames = 0;
            ticks = 0;
        }
    }
}
教务长

好在-loop中反复sleep(2)调用因此这种情况下的硬上限是每秒500个周期(1000 ms除以2 ms),而您测得的460 fps接近于此。running

当然,您可以根据需要调整睡眠时间,如果需要,可以将其填充到精度更高的方法中Thread#sleep(long, int),其中第二个参数是“ nanos”(请注意文档中的警告!)。

您的案例的公式是FPS = 1000 ms / sleep duration in ms从中得出:sleep duration in ms = 1000 ms / FPS

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java-Thread.sleep内部运行方法

来自分类Dev

Java的Thread sleep方法表现异常

来自分类Dev

Java Thread.sleep()

来自分类Dev

java - Thread.sleep

来自分类Dev

Thread.sleep(); 在Java中

来自分类Dev

Java中的心跳:timerTask或thread.sleep()?

来自分类Dev

Java runOnUiThread和Thread.sleep

来自分类Dev

for循环中的Java Thread.sleep()

来自分类Dev

for循环中的Java Thread.sleep()

来自分类Dev

java - 在 EDT 线程中调用 Thread.sleep() 时 SwingWorker 不运行

来自分类Dev

Java Thread join 创建线程的顺序运行

来自分类Dev

Java-应用程序在Thread.sleep方法上崩溃

来自分类Dev

在actor内部调用Thread.sleep

来自分类Dev

Scala演员内部的Thread.sleep

来自分类Dev

如何在Java中正确使用thread.sleep()?

来自分类Dev

Java thread.sleep标准好奇心

来自分类Dev

Java Thread.sleep()是否释放处理器?

来自分类Dev

在Java中是否可以替代Thread.sleep

来自分类Dev

Java thread.sleep标准好奇心

来自分类Dev

在Java中是否可以替代Thread.sleep

来自分类Dev

使用Thread.sleep在Java中计划的时间

来自分类Dev

Thread.sleep 后 Java GUI 未启动

来自分类Dev

Thread.sleep()方法VS Thread.onSpinWait

来自分类Dev

在中间退出Thread.Sleep的最佳方法

来自分类Dev

在异步方法中调用Thread.sleep()

来自分类Dev

Thread.sleep()方法如何工作?

来自分类Dev

如果线程完成,则Java Thread.join()方法将冻结

来自分类Dev

如果线程完成,则Java Thread.join()方法将冻结

来自分类Dev

Java Thread.Join()方法不等待线程完成