gpt4 book ai didi

Java线程获取已用时间::如何获取零钱

转载 作者:行者123 更新时间:2023-12-02 07:01:58 24 4
gpt4 key购买 nike

这是我的线程运行方法

public void run() {
float timeElapsed =0;
while(running){
time += timeElapsed; // recording time.
if(timeElapsed != 0 )Log.d(id, "pressed time " + time + " "+ timeElapsed);
/**fromhere :: just how I get fps ratio.
oneSec += timeElapsed;
fpsCompound++;
if(oneSec > 1){
fpsCompound = 0;
oneSec = 0;
}
**/endhere
timeBefore = System.nanoTime();
loopCall(timeElapsed);
timeElapsed =(System.nanoTime()-timeBefore)/1000000000;
//sometimes my timeElapsed is 0, my guess is because the loopCall does nothing in some cases
while(timeElapsed < .005){
timeElapsed =(System.nanoTime()-timeBefore)/1000000000;
}
}
}

如果 timeElapsed 小于 0.005,我想摆脱那个延迟循环的 while 循环。

但是,如果我跳过该延迟部分,有时我的 timeElapsed 为 0,即使必须经过一小部分秒。

这些零耗时的累积结果会导致意外的时间错误。因此,如果每个循环太快而无法记录时间,我就会延迟线程。

这种不必要的延迟看起来非常愚蠢。必须有一个正确的方法来计算时间。

编辑:

似乎将 timeElapsed 除以 1000000000 返回的值对于我的 float 来说太小而无法包含。有没有办法容纳这么小的数字?

最佳答案

我认为你应该保留纳秒那么长,而不是将其转换为浮点秒。

然后你会得到这样的代码:timeElapsed 定义为 long:

            long timeElapsed = 0;

循环结束将如下所示:

            timeBefore = System.nanoTime();
loopCall(timeElapsed);
timeElapsed =(System.nanoTime()-timeBefore);
while(timeElapsed < 5000000){
timeElapsed = (System.nanoTime()-timeBefore);
}

我希望这就是您正在寻找的内容。

<小时/>

此外,我建议使用 Thread.sleep(long, int); 进行等待你会失去一些精度(它会 hibernate 几毫秒),但会节省一些 CPU 时间

         /*while(timeElapsed < 5000000){
timeElapsed = (System.nanoTime()-timeBefore);
}*/


long leftToSleep = 5000000 - timeElapsed;
if(leftToSleep > 0) {
//dont forget to surround it with try catch
Thread.sleep(leftToSleep / 1000000, (int) leftToSleep % 1000000);
}

关于Java线程获取已用时间::如何获取零钱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16539077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com