Permalänk
Medlem

Stoppa timer efter tid [java]

Jag håller på med ett program som ska skriva ut en sak efter ett visst antal sec och sen fortsätta göra det efter samma antal sekunder. Jag vill dock att sagda program ska sluta efter 20 sekunder och det är något jag inte lyckas få till. Först prövade jag

ctr+=2.9985; if(ctr>=20) tmr.cancel();

men det blir ju inte särskilt precist. Det måste väl finnas ett bra sätt att stoppa efter en exakt tid och inte efter ett antal körningar?

Visa signatur

Speldator: i5 4670k stock | 8GB ram | Asus Z87-plus | Xonar Essence STX | SSD: Intel g2 , Samsung 830 256gb | R9 290 Tri-x | Define R4| Win 8 | Noctua nh-u12p | Qpad Mk-50
marinlik.wordpress.com/ Min blogg för nedbrytning av spel och diverse andra artiklar om NFL
500px.com/niclasbrundell

Permalänk
Medlem

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Timer....

void scheduleAtFixedRate(TimerTask task, long delay, long period) Schedules the specified task for repeated fixed-rate execution, beginning after the specified delay.

Om du vet att den ska stanna efter en tid som är jämnt delbart med raten så kan du räkna antalet exekveringar istället.
T.ex. om du kör varje sekund och vill stänga efter 20 sekunder så kör du cancel på timern efter att din räknare nåt 20.

Om du vill ha på tid istället får du nog ta och spara tiden för när du börjar med current sys time sedan kolla mot detta timestamp senare för att avgöra om du ska avbryta eller inte.
Alternativt starta en timer som endast kör en gång efter X tid som stänger av den andra timern

schedule(TimerTask task, long delay) Schedules the specified task for execution after the specified delay.

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk
Medlem
Skrivet av Gnejs:

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Timer....

void scheduleAtFixedRate(TimerTask task, long delay, long period) Schedules the specified task for repeated fixed-rate execution, beginning after the specified delay.

Om du vet att den ska stanna efter en tid som är jämnt delbart med raten så kan du räkna antalet exekveringar istället.
T.ex. om du kör varje sekund och vill stänga efter 20 sekunder så kör du cancel på timern efter att din räknare nåt 20.

Om du vill ha på tid istället får du nog ta och spara tiden för när du börjar med current sys time sedan kolla mot detta timestamp senare för att avgöra om du ska avbryta eller inte.
Alternativt starta en timer som endast kör en gång efter X tid som stänger av den andra timern

schedule(TimerTask task, long delay) Schedules the specified task for execution after the specified delay.

Jag tänkte stanna efter ett visst antal exekveringar men problemet är att den ska printa var tredje sekund och stanna efter 20 sekunder så det gick inte. Jag kan ju stanna vid 6 exekveringar som det ska bli men då stannar den ju inte efter 20 sekunder, dock samma antal exekveringar...

Visa signatur

Speldator: i5 4670k stock | 8GB ram | Asus Z87-plus | Xonar Essence STX | SSD: Intel g2 , Samsung 830 256gb | R9 290 Tri-x | Define R4| Win 8 | Noctua nh-u12p | Qpad Mk-50
marinlik.wordpress.com/ Min blogg för nedbrytning av spel och diverse andra artiklar om NFL
500px.com/niclasbrundell

Permalänk
Medlem

Som sagt:

schedule(TimerTask task, long delay)
Schedules the specified task for execution after the specified delay.

Låt denna timertask stänga av din återkommande timertask. Sätter du delay till 20 000 ms så vet du att den kommer stängas av efter 20 sekunder.

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |