这是我运行线程的方法
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 返回的值太小,我的浮点数无法包含。有没有办法包含这么小的数字?