17. februar 2005 - 14:14Der er
12 kommentarer og 2 løsninger
Timer der kører præcis hver 10 minut
Hej,
Hvordan laver jeg en timer der kører præcis på klokken slettet: xx:00/15/30/45 altså 14:00 14:15 14:30 14:45 og udfører en process, jeg kan ikke regne med at det tager lige lang tid hver gang, og hvis jeg bare siger at en timer skal trigge om 15 min. vil det vel blive senere og senere, jo længere tid programmet har kørt? Hvordan griber man det an? eller kan man trigge på et klokkenslet med wildcards i....
Hvis du definerer en timer til at køre første gang kl. 14 og derefter med 15*60*1000 millisekunders mellemrum, så vil jeg da forvente at det starter til tiden uanset hvor lang tid det tager at køre timeren.
Ved programmets start, læser du klokken og "udregner" hvor mange millisekunder der til næste xx:yy:00 (hvor yy er 00/15/30). Dette tal sætter du så på timeren og enabler den.
Når timer event sker, udfører du følgende:
- slå timeren fra (altid pænt) - kør din process. - Når denne er færdig gentages udregningen og timeren startes.
Hvis din process hænger vil programmet således ikke forsøge at starte den igen og igen.
Hvis din process tager længere end 15 min (ex. 16 min), vil den ikke køre "2. gang" (eller 3. eller 4. ...).
the_party_dog>> i dit tilfælde ville timeren udfører koden 59 gange for tit ;)
hvis du er sikker på at din kode ikke tager mere end 14 minutter og 59 sekunder at udføre ser jeg ingen grund til at stoppe timeren, men man kan ligeså godt køre den videre. og i så fald er arne og the_party_dog's (med lidt ekstra tweaking) forslag lige gode, og selv ville jeg nok gå efter det det sidste.
if (DateTime.Now.Minute % 15) && (DateTime.Now.Seconds == 0)
Det jo derfor man har en timer class er enig med arne. Der findes også en server based timer i din toolbox den skulle være en anelse mere præcis. Men arnes er præcis og den bruger ikke alt det processor en while bruger.
Jo, nu har jeg kigget lidt mere på det, og det ser jo ud til at virke godt, men hvad ville du ske hvis min process tager længere tid end 10 sek med din version arne?
Tror det blive en kombination af Arne og jpvj, sådan at jeg kan starte det klokken 15.00 f.eks. og så bagefter bruge Arne's..
Men hvad vil du ske hvis det tager længere tid end de planlangte 15 mins?
hmmm, tænke tænke, egentlig hælder jeg mest til "jpvj" da den ikke starter en ny process hvis den ikke er færdig, men det må jeg lige teste lidt mere med, for ellers ville det jo gå helt amok hvis de forskellige processes aldrig når at blive færdig, så går maskinen nok ned på tid tidspunkt eller løber tør for ram....
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.