¿Hay problemas de bucle en un programa?¿El lazo cerrado es malo?
Tengo una aplicación que tiene dos hilos para un simulador de física de juegos. Un hilo de actualización de juego y un hilo de renderizado. El subproceso se acelera haciendo que el subproceso duerma durante algunos milisegundos (para lograr la velocidad de fotogramas que deseo) y el subproceso updateGame (que actualiza mis posiciones en objetos de juego basados en algunas ecuaciones físicas) se redujo previamente con un sueño de 10 milisegundos .
Sin embargo, recientemente desentregulé el subproceso updateGame y la simulación del movimiento de mis objetos parece ser significativamente más realista ahora que he sacado ese 10ms sleep. ¿Es malo hacer un bucle en caliente o tener un circuito cerrado?
private class UpdateTask implements Runnable
{
private long previousTime = System.currentTimeMillis();
private long currentTime = previousTime;
private long elapsedTime;
public void run()
{
while(true)
{
currentTime = System.currentTimeMillis();
elapsedTime = (currentTime - previousTime); // elapsed time in seconds
updateGame(elapsedTime/1000f);
try {
Thread.currentThread().sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
previousTime = currentTime;
}
}
}
En este ejemplo sólo estoy durmiendo durante 1 ms (y de mi entendimiento con la forma en milisegundos precisión y la función de apagado automático funciona esto es probablemente más como 5-10ms. Si duermo más que esto comienza a tener un impacto sobre la exactitud de mi detección de colisiones y modelo de la física.
¿es una mala práctica tener lazos estrechos o bucles con 1ms duerme en ellos? ¿hay algo más que debería hacer en su lugar?
Debe utilizar 'Thread.sleep (...)' en lugar de 'Thread.currentThread(). Sueño (. ..) 'porque es un método estático; su código podría tentarlo a hacer 'someOtherThread.sleep (...)' que no duerma 'someOtherThread'. – newacct