Problem mit dem Auslesen der Systemzeit
-
Hallo,
brauch für ein Programm die unterschiedlichen Zeiten. In einer Funktion wird die Zeit genommen und in einer anderen späteren Funktion wird die Zeit widerrum gemessen. Dann möchte ich die Differenz haben zwischen beiden Zeiten, um zu sehen, wie lange es gedauert hat.
Habe es zur Zeit zu Testzwecken so implementiert:SYSTEMTIME st;
SYSTEMTIME dt;GetSystemTime(&st);
Sleep(1000);
GetSystemTime(&dt);
cout<<&st.wMilliseconds<<endl;
cout<<&dt.wMilliseconds<<endl;cout<<&dt.wMilliseconds - &st.wMilliseconds<<endl;
Nur bekomme ich immer die gleichen folgenden Werte heraus:
1245066
1245050
und bei der Differenz: -8Was mache ich falsch? Kann mir jemand helfen?
Danke.cash21
-
Mittels & gibst Du die Adressen der Speicherstellen aus.
cout<<st.wMilliseconds<<endl; cout<<dt.wMilliseconds<<endl; cout<<dt.wMilliseconds - st.wMilliseconds<<endl;
-
Danke.
War ein Fehler von mir. Ohne geht es natürlich.
Aber noch eine Frage, manchmal kommt bei der Differenz negative Zahlen raus.
Das dürfte normal nicht sein, da ich ja kurz Sleep dazwischen mache.
Kann mir das jemand erklären? Oder gibt es vielleicht auuch bessere Methoden um die Zeiten zu messen.
Da ich mit Millisekunden arbeite, müssten diese Zeiten schon genau sein, und nicht zu sehr abweichen.
-
Platform SDK: Stichwort 'SYSTEMTIME' unter 'Remarks' schrieb:
It is not recommended that you add and subtract values from the SYSTEMTIME structure to obtain relative times. Instead, you should
o Convert the SYSTEMTIME structure to a FILETIME structure.
o Copy the resulting FILETIME structure to a ULARGE_INTEGER structure.
o Use normal 64-bit arithmetic on the ULARGE_INTEGER value.The system can periodically refresh the time by synchronizing with a time source. Because the system time can be adjusted either forward or backward, do not compare system time readings to determine elapsed time. Instead, use one of the methods described in 'Windows Time'.
-
Kannst du mir das noch kurz erklären?
Komme da nicht ganz heraus. Mit dem gesamten Umwandeln von einen Typ in einen anderen.
-
Willst du nur die vergangenen Millisekunden haben ?
Dann wäre evtl. GetTickCount() besser als GetSystemTime(), da GetTickCount() direkt millisekunden liefert.
GetSystemTime() liefert ja das komplette Datum und die komplette Uhrzeit.Wenn es z.B. gerade 12 Uhr, 15 Minuten, 1 Sekunde und 500 Millisekunden beim ersten Aufruf sind und beim zweiten dann 12 Uhr, 15 Minuten, 2 Sekunden und 400 Millisekunden, würdest du ja dieses rechnen:
400 millisekunden - 500 millisekunden = -100 millisekunden.Wenn Du Differenz haben möchtest müsstest du also erstnoch die Stunden, Minuten und Sekunden jeweils erst noch zu den Millisekunden dazurechnen und dann die beiden Zeiten subtrahieren...
...da wäre GetTickCount() wesentlich einfacher

-
Ok das ist natürlich richtig. Habe es jetzt mit GetTickCount() gemacht. Die Werte sehen auch sehr gut aus.
Danke nochmal für die Hilfe.
-
ich würde Dir anraten dass Du Dir die empfohlene Konvertierung trotzdem mal anschaust, hat nen guten Lerneffekt und sowas brauchst Du bei der WinApi öfters mal.
mfg
|Fusion