これがスレッドのメソッドの実行です
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 が .005 未満の場合にループを遅らせる while ループを取り除きたいです。
ただし、その遅延部分をスキップすると、経過した秒数のごく一部が必要な場合でも、timeElapsed が 0 になることがあります。
これらのゼロ経過時間の累積結果は、予期しない時間エラーになります。したがって、各ループが速すぎて時間を記録できない場合は、スレッドを遅らせます。
この不必要な遅延はかなりばかげているようです。時間を計算する正しい方法がなければなりません。
編集:
timeElapsed を 1000000000 で除算すると、小さすぎてフロートに収まらない値が返されるようです。このような小さな数を含める方法はありますか?