Repetir uma Thread a cada 1Milisecond

2 respostas
G
eu to tentando fazer uma Thread, ou somente um loop que n pare o programa todo. o importante é que ele aconteça exatamente 1 vez por milisegundo então eu tentei o seguinte codigo:
import java.util.Timer;
public class main {

    public static void main(String[] d){
        Timer time = new Timer();
        time.schedule(new Mainloop(), 500, 1);
    }
}
e
public class Mainloop extends TimerTask{

    private static GameObject[] toUpdate = new GameObject[3600000];
    private static int actualindex = 0;
    @Override
    public void run() {
        try {
            toUpdate[actualindex].Update();
            toUpdate[actualindex++] = null;
        } catch (Exception e) {
            System.out.println(actualindex++);
        }
        // outros metodos irrelevantes
o problema é que o Timer n consegue fazer 1 a cada milisecond, ele faz tipo.. 1 a cada 15 miliseconds. e eu sei que n é problema do computador ser mt lento pq se eu mando ele rodar um loop infinito:
while(true){
        try {
            toUpdate[actualindex].Update();
            toUpdate[actualindex++] = null;
        } catch (Exception e) {
            System.out.println(actualindex++);
        }
ele faz 10000 vezes por segundo.. o que da 10x mas que o nessessario...

eu procurei na internet e parece que usar aqueles "Realtime" resolveriam o problema, mas é tudo pago pelo que percebo... tem algo que vem no JDK 1.6 que eu possa usar?

2 Respostas

dionat4n

A precisão contida nos relógios da maioria dos sistemas operacionais é de um sexagésimo de segundo, ou seja, em torno de 16 milisegundos.

Acredito que você não vai conseguir fazer com uma precisão assim, não interessa quão veloz é o teu processador.

Uma tentativa é utilizar o System.nanoTime();
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#nanoTime()

Mas não se engane, esses nanosegundos são medidos através de uma heurística.

dionat4n

Ah, se conseguir, por favor me informe! Mudaria minhas perspectivas… :-o

Criado 13 de janeiro de 2009
Ultima resposta 13 de jan. de 2009
Respostas 2
Participantes 2