# Echtzeit / Stabile Zeit



## XXL (23. Sep 2006)

Hi!
Bei meinem aktuellen Projekt setze ich


```
try{Thread.sleep(10);}
```

ein, um einen vernünftigen Bildfluss zu bekommen ... irgentwie beobachte ich aber abnormale Geschwindigkeitsschwankungen und auch ruckeln  :bloed: - den genauen Grund kenne ich nicht wirklich

jedenfalls: ich wollte ein besseres Zeitsystem - ich würde mich über jede Hilfe freuen, also z.B. auch wo man derartige infos findet bzw. wo man in dokumentation suchen muss 

  :###


----------



## Apo (23. Sep 2006)

am besten du würdest Timer benutzen wie z.B. den GageTimer ... damit bekommst du sehr gute Ergebnisse.
Sonst mache ich es immer folgendermaßen

```
public void run()
	{
		Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
		
		long	startTime	= System.nanoTime();

		while ( this.bThread )
		{
			// run logic ...
                        ...
			try
			{
				startTime += TimeUnit.MILLISECONDS.toNanos( this.delay );
				long t	= TimeUnit.NANOSECONDS.toMillis( startTime - System.nanoTime() );
				Thread.sleep( Math.max(0, t ) );
			} catch (InterruptedException e)
			{
				break;
			}
		}
	}
```


----------



## 0xdeadbeef (23. Sep 2006)

> Thread.sleep( Math.max(0, t ) );



Wie schon des öfteren betont, führt ein Sleep mit einem Wert unter 10-20ms zum einen nicht auf jedem Betriebssystem zum gewünschten Ergebnis, zum anderen kann es auf WinXP dazu führen, daß die Systemuhr verstellt wird.

Siehe z.B. auchh hier:
http://www.java-forum.org/de/viewtopic.php?p=184944&highlight=#184944


----------



## Apo (23. Sep 2006)

ok, dass es so schlimm ist ... wusste ich nicht.
Dann nimm halt eine externe Library mit einem Timer wie z.B. den GageTimer, dann hast du den Stress nicht.


----------



## XXL (23. Sep 2006)

danke für die antworten


----------



## LoN_Nemesis (23. Sep 2006)

EIn gutes Beispiel sieht man auch hier, mit Quellcode:

www.spacejack.org/games/dbufanim/


----------

