# Timer abbrechen und neu starten



## Guest (3. Nov 2006)

Hallo!

mein Problem ist folgendes:
Ich bekomme über einen Listener ein Event, das einen Timer startet, der nach 3 Minuten einen Timertask ausführt.
Während der 3 Minuten kann es vorkommen, dass ein neues Event eintrifft, dabei sollte der aktive Timer wieder zurückgesetzt werden und mit der Zeitzählung von vorne anfangen. 

Ich habe versucht, als erstes in der Listenermethode ein timer.cancel() durchzuführen, allerdings muss beim ersten Event bereits ein Timer aktiv sein, damit man ihn überhaupt beenden kann (nach meiner Interpretation).
leider habe ich keine Funktion gefunden, die den Status eines Timers zurückgibt - damit könnte ich wahlweise die cancel() - Methode ausführen.

hat jemand von euch eine Idee mir zu helfen?



```
public void isEvent(myEvent e){
		this.timer.cancel();
		this.timer.schedule(new TimerTask,TIMETOWAIT);
	}
```


----------



## SlaterB (3. Nov 2006)

das sieht mir in der API so aus, als wäre das ein bisschen dramatischer als du planst:

---------
public void cancel()
Terminates this timer, discarding any currently scheduled tasks. Does not interfere with a currently executing task (if it exists). Once a timer has been terminated, its execution thread terminates gracefully, AND NO MORE TASKS MAY BE SCHEDULED ON IT. <----

Note that calling this method from within the run method of a timer task that was invoked by this timer absolutely guarantees that the ongoing task execution is the last task execution that will ever be performed by this timer.

This method may be called repeatedly; the second and subsequent calls have NO EFFECT. <--------
----------

vielleicht baust du dir lieber einen eigenen einfachen Thread, der Aufträge entgegennimmt,
verschieben kann und alle x ms vorbeischaut um Tasks zu starten wenn nötig?

ist ein alle 10 ms geweckter Thread eigentlich Performance-fressend?


----------



## Guest (3. Nov 2006)

eigentlich muss ich nicht dasselbe timerobjekt resetten, ich kann ja auch eine neue Instanz erzeugen, die dann den countdown von vorne startet. dazu müsste ich allerdings den laufenden timer explizit abbrechen bzw um das zu machen vorher checken, ob überhaupt ein timer aktiv ist. 
Ich hab mir überlegt, den zugrundeliegenden Thread runterzufahren, dazu hab ich ihm einen Namen gegeben ...
	
	
	
	





```
this.timer=new Timer("threadname");
```
leider weiß ich nicht, wie man in der VM darauf zugreift


----------



## Guest (3. Nov 2006)

... manchmal sieht man den Wald vor lauter Bäumen nicht mehr

hab jetzt das timer.cancel() über exceptionhandling abgefangen...


----------

