0

次のコードを使用して、スレッドを使用してティック更新システムを実装するプログラムを作成しようとしているという奇妙な問題があります。

@Override
public void run(){
    long lastTime = System.nanoTime();
    long deltaTime;
    float passedTime = 0;
    long ticks = 0;

    while(true){
        long currentTime = System.nanoTime();

        deltaTime = currentTime - lastTime;
        lastTime = currentTime;

        passedTime += deltaTime / tickTime;

        if(passedTime * 20 > ticks){
            ticks++;
            tick();

            System.out.println(ticks);
        }
    }
}

これは正常に動作しますが、正確に 161 ティック後に実行が停止し、何もスローせず、例外もエラーも何もスローしません。ただし、次のことを行うとすぐに:

@Override
public void run(){
    long lastTime = System.nanoTime();
    long deltaTime;
    float passedTime = 0;
    long ticks = 0;
    long useless = 0;

    while(true){
        long currentTime = System.nanoTime();

        deltaTime = currentTime - lastTime;
        lastTime = currentTime;

        //Don't focus on this bit, I know it's a bit odd.
        passedTime += deltaTime / tickTime;

        if(passedTime * 20 > ticks){
            ticks++;
            tick();

            System.out.println(ticks);
        }

        useless++;
        System.out.print(useless);
    }
}

そして今、突然問題なく実行されますか?

これが原因である可能性があることを誰かが知っていますか? 前もって感謝します!

4

1 に答える 1