Probleme mit Timer
-
Probiers mal damit:
SYSTEMTIME now; GetSystemTime(&now); long millsek= now.wMilliseconds; long sek= now.wSecond;
-
Soweit ich das sehe, hole ich mit GetCurrentTime() bzw. GetSystemTime() die aktuelle Zeit aus, ich brauche aber einen Timer, der von Null anfängt zu zählen.
-
SYSTEMTIME start,now; start.wMilliseconds=0; Thread schleife{ TimeGetTime(&now); long lElapsedTime= now.wMilliseconds- start.Milliseconds; long Seconds= lElapsedTime/1000; Seconds= SEKUNDEN VERGANGEN }
-
Zu der Abweichung:
Echtzeitbetriebssystem:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-127079.html
http://www.c-plusplus.net/forum/viewtopic-var-t-is-119192.html
http://www.c-plusplus.net/forum/viewtopic-var-t-is-113316.html
http://www.c-plusplus.net/forum/viewtopic-var-t-is-79326.html
-
Danke für die vielen guten Lösungsvorschläge und Links, leider wird die Abweichung trotzdem nicht kleiner. Ich hab mir alle Beiträge durchgelesen, blöderweise steht da nur dasselbe: Dass Windows kein Echtzeitbetriebssystem ist.
-
Ich versteh einfach nicht, wie die Systemuhr in Windows so genau laufen kann, obwohl da nebenher noch viele andere Prozesse laufen. Kann man das nicht irgendwie übernehmen?
-
enne87 schrieb:
Ich versteh einfach nicht, wie die Systemuhr in Windows so genau laufen kann, obwohl da nebenher noch viele andere Prozesse laufen. Kann man das nicht irgendwie übernehmen?
Die Systemuhr wird durch einen (Hardware-) Interrupt gesteuert und hat somit mit Threads/Prozessen gar nichts zu tun.
PS: Warum verwendest Du nicht "GetTickCount"? Das beginnt nach dem Einschalten des Rechners bei 0. Läuft halt nach 48 Tagen über, aber das sollte man abfangen können.
PPS: Was ist denn Dein eigentliches Ziel?
-
Bevor ich ::timeGetTime()verwendet habe, hab ich GetTickCount() verwendet, ich habs danach nur mit timeGetTime() ersetzt weil ich dachte, das wäre sehr ungenau. Mittlwerweile weiß ich, dass timeGetTime() auch nicht genauer ist.
Mein Ziel ist es, in meine Oberfläche einen Zähler zu implementieren, welcher sich sekündlich erhöht und die Form hh
ss besitzt. Ich will anzeigen, wie lange die Applikation läuft, nachdem ich mein Programm kompiliert habe. Der Timer läuft in einem separaten Thread.Warum ich nach einer Minute bereits eine Abweichung von 2 Sekunden habe, ist mir schleierhaft.
-
mach in deine Anwendung nen (Hauptfenster) ein timer
SetTimer, KillTimer, OnTimer etc. mit intervall von 200 millsekunden
da frägst jedes mal die aktuelle zeit ab mit SYSTEMZEIT now; TimeGetTime(&now)
und ziehst das now (wSekudnen, wMillisekunden, wMinuten ,usw.) und errechnetst so die veragngen zeit in dem du bei mstadt deiens programmes im kosntruktor noch ne start varaibel setzt
-
Ok danke Boris, könntest du mir bitte noch die Headerdatei sagen, in der ich TimeGetTime() finden kann?
-
gib mal TimeGetTime ein klck drauf rechte maustaste "Gehe zu definition" die header die sich dan öfnet musst einbinden;)
-
Super, funktioniert tadellos, vielen dank, speziell Boris

-
Ein kleines Problem ist da noch: Ich schreibe die Zeit mit SetWindowTextW() in ein statisches Feld, jedoch flackert das ziemlich. Liegt daran, dass die Zeit dauernd neu geschrieben werden muss.
Kann man da noch was machen?
-
ja das lieg am weil du die zeit sicher mehrmals pro sekunde in das feld schreibst oder?
merk dir den wert in dem feld noch extra in einer variable, und nur wenn sich der wert er höh als eine sekunde mehr soll er das feld aktualisieren! denke wenn du das feld dann nur jede sekunde aktualisierst drüfte es nich mehr flackern
-
Ok, vielen Dank Boris
