Genauere Timer als SetTimer
-
Hallo!
Ich brauche für eine kleine Anwendung eine Stoppuhr.
Dazu habe ich bisher die SetTimer Funktion verwendet und dann die WM_TIMER Message verarbeitet.
Doch das ist ja nichtmal auf Sekunden genau scheinbarIch bräuchte aber einen Timer, der auf Millisekunden oder zumindest Hundertstelsekunden genau ist...
Hat da jemand eine Idee/Stichwort, was ich mir angucken kann?Meine Programmierkenntnisse sind allerdings begrenzt, also muss nicht zu kompliziert sein, hoffe ich
-
Zählst du in WM_TIMER die Zeit hoch oder wie?
Üblicherweise merkt man sich bei einer Stoppuhr den Startzeitpunkt und berechnet in WM_TIMER (und wo auch immer man stoppt) nur "AktuellerZeitpunkt"-"Startzeitpunkt", dann ist die Ungenauigkeit von WM_TIMER egal solange die Funktion über die man die aktuelle Zeit ermittelt genau genug ist.In diesem Thread sind auch ein paar Stichworte drin, die evtl. nützlich sein könnten:
http://www.c-plusplus.net/forum/244991-full
-
Um nur zu messen: QueryPerformanceCounter:
http://stackoverflow.com/questions/1739259/how-to-use-queryperformancecounterFür einen Timer, musst Du Dir den Multimedia-Timer anschauen:
http://msdn.microsoft.com/en-us/library/windows/desktop/dd743609
-
Hey
danke schonmal für eure Ideen.
Ja also bisher habe ich in WM_TIMER die Zeit hochgezählt, ja. So mit SetTimer auf 5 Millisekunden und dann in WM_TIMER die Zeit 5ms inkrementiert. Das dann gepainted und ich hatte eine sehr ungenaue Stoppuhr.
Ist das nicht gut?Also es geht in mir erster Linie darum, zu relativ exakten Zeitpunkten, die fix und bekannt sind, eine Aktion auszuführen. Also bspw tu dies nach 8 Sekunden, tu das nach 13,74 Sekunden usw. (Man klickt halt vorher auf Start als Nullpunkt für die Zeit)
Deshalb dachte ich, wäre es ja schonmal gut, zumindest eine Stoppuhr zu haben, dann hätte ich irgendwie weitergesehen...
Was denkt ihr, welcher Ansatz ist dafür der beste? QueryPerformanceCounter oder Multimedia Timer? Oder doch eine schlauere Lösung mit SetTimer?
-
Wenn Du einen genaueren Timer brauchst, dann nimm die Multimedia Timer!
-
JackySparrow schrieb:
... ich in WM_TIMER die Zeit hochgezählt, .. so mit SetTimer auf 5 Millisekunden und dann in WM_TIMER die Zeit 5ms inkrementiert.
Wenn Du das mal nachmessen würdest, wäre offensichtlich das 5ms absolut unrealistisch sind. Du überforderst die MessageQueue.
JackySparrow schrieb:
Also es geht in mir erster Linie darum, zu relativ exakten Zeitpunkten, die fix und bekannt sind, eine Aktion auszuführen. Also bspw tu dies nach 8 Sekunden, tu das nach 13,74 Sekunden usw.
Was nun ? Aktionen im ms Bereich, oder reichen Sekunden ? Was bedeutet in diesen Zusammenhang "relativ" exakt ?
Wenn eine Genauigkeit von 100ms reicht würde ein einfacher Timer gehen.
Systemauslastung, Prioritäten u.s.w. angemessen berücksichtigt.
Das Senden einer Message an die GUI ist bei zeitkritischen Dingen vermutlich nicht ausreichend.