【发布时间】:2013-10-15 14:22:56
【问题描述】:
我想编写一个需要在指定时间执行某些操作的 Android 应用程序(确切地说是游戏)。这些更新的精度应不低于 1ms。这可能吗?
我尝试运行一个线程并使用 System.nanoTime() 测量更新之间的时间。结果,有数百次更新之间的时间等于或长于 1 毫秒。
我能否以某种方式达到一种精度,确保每 1 毫秒至少执行一个循环?
这是我用于测试的代码:
public class MyThread extends Thread
{
private boolean running = false;
public void setRunning(boolean running)
{
this.running = running;
}
public MyThread()
{
this.setPriority(MAX_PRIORITY);
}
@Override
public void run()
{
long currentTimeNano = 0;
long lastFrameTimeNano = 0;
long nanoFrameDelay = 0;
int longDelays = 0; //Number of delays >= 1ms
while(running)
{
currentTimeNano = System.nanoTime();
//Measure delay between updates in ns
nanoFrameDelay = currentTimeNano - lastFrameTimeNano;
if(nanoFrameDelay >= 1000000)
longDelays++;
lastFrameTimeNano = currentTimeNano;
}
}
}
提前谢谢你!
【问题讨论】:
-
需要这么多更新是很不寻常的。能否提供更多背景信息?
-
为什么需要至少每毫秒更新一次?这意味着帧率超过 1000 FPS,大多数游戏都在 30-120 范围内。
-
我想将应用程序的行为与音乐同步。例如,我想在音乐的当前播放时间等于 571ms,然后是 823ms,然后是 6531ms 等时做一些事情。
-
这不是 FPS。我不想每毫秒渲染一帧,我只想执行所需的计算。
-
用户如何看待你做“当音乐的当前播放时间等于 571ms”而不是 570ms 或 572ms 之间的区别?另外,请说明您希望在这些时间点具体做什么。
标签: java android multithreading performance precision