Timer i C#

Tags:    c#

Hej,

Nogen der kender en måde hvorpå man kan time meget præcist. Har et event der skal triggeres hvert sekund. Har prøvet med System.Windows.Forms.Timer, men den er virkelig upræcis.

Laver et NetMeter, så det skal være temmelig præcist. Har set på HighResolutionTimer, men ved ikke helt hvordan jeg skal få den til at Tick for hvert sekund ligesom med Windows' timer.

- Håber nogle kan hjælpe :)

/Mikkel





9 svar postet i denne tråd vises herunder
4 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Hej Mikkel

Har du prøvet at kigge på System.Timers?
Ved ikke hvor præcis den kører, men kan da forestille mig den er bedre en WindowsForms timeren. System.Timers indstiller du med milisekunder, så det burde vel være præcist nok til sekund trigger.

Lidt videre research og en forklaring på dit problem: http://netpl.blogspot.com/2010/05/systemwindowsformstimer-vs.html

//Anders



Indlæg senest redigeret d. 21.12.2010 01:33 af Bruger #15595
Hej Mikkel

Som Anders skrev, så kan du bruge System.Timers.

Eks. lavet i en console, så hvis det er i en form skal den while(true) {} selvfølgelig ikke være der.
Fold kodeboks ind/udKode 


Hvis det ikke kan bruges kan du evt kigge på Thread.Sleep i en while loop.





Hej Mikkel,

du kan desværre hverken bruge den nemme timers (eller thread.sleep (som også ville være slem træls)) når det skal være præcist.. Ved ikke lige hvad senariet er, jeg har personligt i et projekt hvor jeg skulle gemme tider, sat en timer til at køre hvert 5. sekund, hvor efter den så regner med datetime fra start tidspunkt (1.) til at finde den præcise tid.




Hej Mikkel,

http://www.daniweb.com/code/snippet216441.html

Specielt linjen:
Console.WriteLine("DateTime.Ticks = " + CurrTime.Ticks);

Held og lykke med det.

Med venlig hilsen
Ieet




Tak for svarende alle sammen. Prøver med Anders' løsning med System.Threading.Timer og ser hvordan det går :)

@Benni
Altså programmet skal sådan set bare måle hastighederne på download og upload speed. Endvidere når jeg fx har hentet en 400mb fil skal den gerne ha regnet sammen at jeg har hentet omtrent ~400mb.



Hej Mikkel

Du kunne prøve at kigge på denne side.
http://www.codeproject.com/KB/cs/CS_Stopwatch.aspx

Venlig hilsen
Claus



@Claus
Ved ikke helt hvordan jeg kan bruge stopwatch, idet det kun tager tid fra et start tidspunkt og til et slut tidspunkt. Hvad jeg har brug for er at trigger et event hvert sekund, så præcist som muligt. :)



Hej Mikkel

Du kunne måske bruge denne.....
http://www.codeproject.com/KB/miscctrl/lescsmultimediatimer.aspx?df=100&forumid=28179&exp=0&select=1527539

Win32 multimedia timer, skulle have en Tick event.:D





@Claus
Har netop prøvet at implementere timeren du linker til, hvilket desværre ikke virkede. Kan få programmet til at køre helt fint, men så snart jeg åbner en ny form (options form), så fryser timeren. Er gået tilbage til System.Timers.Timer, som @Anders anbefalede. Så må jeg nøjes med en lidt højre resolution, men går vist :)

Men mange for hjælpen :) God jul allesammen ;D



t