# Zeitsitschleife anstatt Timer



## dl85hej (24. Feb 2009)

Hallo!

Einen Timer in JAVA einzubinden ist ein Thema für sich...eher etwas für Fortgeschrittene!

Mich würde eine Zeitschleife interessieren.
Wie kann man denn eine Zeitschleife aufbauen?


Danke


----------



## 0x7F800000 (24. Feb 2009)

Was ist eine Zeitschleife? Ist das dieses Ding für Zeitsprünge? Java ist zwar mächtig, aber doch nicht so...

Timer braucht man eigentlich nicht unbedingt, man kann dasselbe auch mit einem gewöhnlichen Thread erledigen:
[HIGHLIGHT="Java"]
Thread thread=new Thread(){
  @Override
  public void run(){
     while(!isInterrupted()){
         //irgendwas sinnvolles machen
         try{
             sleep(1000); //eine sekunde lang pennen
         }catch(InterruptedException e){
             interrupt();
         }
   }
};
thread.start();
[/HIGHLIGHT]
Sowas ist praktisch, wenn man nicht alle ressourcen wegfressen will, sondern eben ab und zu irgendwas nicht allzu aufwendiges machen will.

Was ich früher von alten zeiten kenne ist die sogenannte "gameloop", die versucht wirklich alle verfügbare ressourcen zu verbrauchen, was bei alten spielen auf 1 prozessor auch durchaus sinnvoll war:
http://en.wikipedia.org/wiki/Game_programming#The_game_loop
Da müsste man korrektheitshalber die Zeit immer messen, um das Ruckeln zu verhindern, und unterschiedliche Spielgeschwindigkeiten auf unterschiedlich shcnellen rechnern zu vermeiden:
[HIGHLIGHT="Java"]
long time=System.currentTimeMillis(),dt;
while(true){
   dt=System.currentTimeMillis()-time;
   time=System.currentTimeMillis();
   moveEverything(dt); //bewegung von der vergangenen zeit abhängig
}
[/HIGHLIGHT]
Aber irgendwie kA was du machen willst, erklär's mal genauer.


----------



## dl85hej (25. Feb 2009)

Hallo Andrey!

Unter Pascal wurden die Zeiten noch mit einer Zeitschleife (Warteschleife) realisiert... ;-)

Ich danke dir für den einfachen sleep - Tipp.
Habe es schnell realisieren können...und auch begriffen!
...bisher aber nur die Variante light:


```
try{
            Thread.sleep(1000);
            System.out.println("die Zeit ist um");
        }catch (InterruptedException e){
           //interrupt();
        }
```

Dennoch ein paar Fragen:
1. Der neue Thread dient dazu, dass die main Methode nicht blockiert wird, richtig?
2. wie darf ich die while 
	
	
	
	





```
while(!isInterrupted())
```
 Schleife verstehen?
3. wie erreiche ich die Methode interrupt()? Mit anderen Worten: Ich möchte bei einer sleep Zeit von 30 Minuten schon nach 15 Minuten abbrechen können...

Danke dir!


----------



## eliot (25. Feb 2009)

http://java.sun.com/javase/6/docs/api/java/lang/Thread.html

Zum Abbrechen eines Threads: thread.interrupt();

regards
eliot


----------



## 0x7F800000 (25. Feb 2009)

Man kann einen Thread dazu auffordern seine Arbeit aufzugeben, dann wird da intern dieser isInterrupted flag verändert, und die while schleife bricht ab, der Thread beendet dann normal seine Arbeit.
Siehe hier: http://openbook.galileocomputing.de...11_003.htm#mjfc6d2ff1fc866634c8260d7febbc36bb


----------



## dl85hej (25. Feb 2009)

@Andrey: toller Link! Ich glaube, das Buch fehlt mir noch!

Habe bisher nur das Handbuch der JAVA Programmierung....und da fehlt bspw. der Timer komplett...


----------

