Problemet er så bare, at sættes computerens ur baglæns, så stopper timeren. For timeren er relativ til computerens ur. Sætter jeg således mit ur i Windows en time tilbage, ja så udføres timeren (run() i TimerTask) ført når der er gået en time. Hvilket jo ikke dur, når man eksempelvis går til vintertid.
En simpel tråd og en sleep er ikke godt nok (da opgaven der udføres tager forskellig tid), og uret således ikke opdateres tæt nok på hvert sekund.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Normalt så kører computerens UR på GMT og Windows skifter automatisk offset i forhold til GMT ved skift til/fra vintertid og det bør ikke påvirke en timer.
Synes godt om
Slettet bruger
26. marts 2005 - 16:48#2
Ok, så gør det nok ikke det. Men problemet er det samme.
Hvis jeg starter mit java_ur.jar ... og så sætter computeren ur 10 minutter tilbage, så tager det 10 minutter før at timerens run() udføres.
Forstår du hvad jeg mener? (det med vintertid var bare et eksempel, kan godt være det ikke bliver et reelt problem, hvis GMT anvendes som du skriver).
Overvejer noget fusk med en anden tråd, der checker om timerens task ikke er blevet udført i lang tid (eksempelvis 5 sekunder), og hvis den ikke er, så nedlægger den gamle timer og opretter en ny. Men altså...
Synes godt om
Slettet bruger
26. marts 2005 - 17:00#5
Eller en anden tråd, der opdager om tiden er gået baglæns, og hvis den er, nedlægger og opretter en ny timer.
Synes godt om
Slettet bruger
26. marts 2005 - 20:08#6
Har du flere kommentarer arne_v ellers tror jeg, jeg lukker?
Jeg tror simpelthen ikke at du kan stille på tiden mens du har en timer kørende og få noget fornuftigt ud af det.
Det du skal gøre er at justere tiden langsomt.
I stedetfor at lave -10 minutter så laver du:
for(int i = 0; i < nominut*60; i++) { // lav -1 sekund // sleep 2 sekunder }
Synes godt om
Slettet bruger
30. marts 2005 - 15:13#8
Det er ikke mig selv, der skal ændre på tiden. Men Windows' ur synkroniserer jo med en tidsserver. Og hvis uret pludesligt stilles tilbage, så skal mit program ikke stoppe med at opdatere uret.
Jeg har implementeret noget fusk, der holder øje med om tiden gør det, og hvis den gør, gendanner timertask.
Hvis du vil have point for din indsats, så læg et svar.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.