Hallo, für eine Anwendung in C++ wird eine Zeidifferenzberechnung benötigt. In C++ gibt es den Typ time_t. Wie kann damit eine Zeitdifferent in Mikrosekunden zwischen zwei Zeitstempeln berechnet werden?
:
Verschoben durch User
Ich benötige die Dieffernz von folgenden Zeitstempel [stunden,minuten,sekunden,millisekunden]: Zeitstempel 1: TIME 08:58:29.713453 Zeitstempel 2: TIME 08:58:30.422930
Ja, und? Man berechnet eine Differenz in C über den Operator "-". Das ist sie Anbeginn der Zeitrechnung so, und daran hat sich nach meiner Kenntniss auch nie etwas geändert. Wo also ist das Problem? Oliver
Das hängt etwas vom verwendenten System ab; time_t is IMHO nicht standardisiert, also in der Doku zu Deinem Compiler schauen was es genau representiert.
Ich werd nie verstehen, was daran so schwer ist, die paar Stichworte die man hat, einfach mal in Google reinzugeben und den suchen zu lassen. Mit "time_t" oder "C++ time_t" findet Google in den ersten paar Links erstklassige Referenzen. Da liest man dann eben einbischen, folgt vielleicht noch dem einen oder anderen vielversprechenden Link und in ein paar Minuten hat man alle Informationen, die man braucht. Wenn man keine vernünftige Literatur auf dem Schreibtisch stehen hat (was sowieso schon mal ein Fehler ist), dann sucht doch bitte mittels Google das Web ab! Ihr habt 90% allen Wissens, das die Menschheit je besessen hat mittels ein paar Tastendrücken zur Verfügung. Warum nutzt ihr dieses Potential denn nicht. Den jeweils neuesten Ego-Shooter findet ihr ja auch problemlos im Web. http://www.cplusplus.com/reference/ctime/
:
Bearbeitet durch User
1. Vollkommen richtig. 2. Vor allem würde man dann solche peinlichen Antworten vermeiden, wie sie in diesem Thread leider wieder vorkommen. Seit wann stehen in time_t überhaupt Millisekunden drin? In der Regel ist das eben nicht der Fall.
Sorry muss mich korrigieren. Der Typ time_t beinhaltet natürlich keine Millisekunden. Diese Millisekunden kommen bei mir von wo anders her. Muss zuerst die Differenz in Sekunden von time_t berechnen und im Anschluss die Differenz von den Millisekunden hinzuandieren.
leo schrieb: > Sorry muss mich korrigieren. Der Typ time_t beinhaltet natürlich keine > Millisekunden. Diese Millisekunden kommen bei mir von wo anders her. > Muss zuerst die Differenz in Sekunden von time_t berechnen und im > Anschluss die Differenz von den Millisekunden hinzuandieren. Ja und. Mit den Funktionen und Datentypen aus dem Standard ctime Header (oder time.h in C) ist das doch kein Problem. Du füllst eine struct tm aus, lässt dir die mit einer Standard Funktion auf ein time_t umwandeln, benutzt difftime um die Differenz zu erhalten und wandelst das Ergebnis wieder in einen struct tm um dann nach Herzenslust die Tage, Stunden, Minuten etc. aus dieser Struktur rauszuholen. Alle Zutaten sind im Link vorhanden. Brauchst nur ein bischen lesen und die Beispiele studieren.
leo schrieb: > Sorry muss mich korrigieren. Der Typ time_t beinhaltet natürlich keine > Millisekunden. Diese Millisekunden kommen bei mir von wo anders her. > Muss zuerst die Differenz in Sekunden von time_t berechnen und im > Anschluss die Differenz von den Millisekunden hinzuandieren. sagt doch erst mal was du genau messen willst. Die time Funktionen sind nicht für absolute kurze genaue Zeiten geeignet. Was passiert wenn NTP die Uhrzeit korrigiert? Wenn es um exakte Zeitenmessungen geht nimmt man unter Windows z.b. QueryPerformanceCounter (gibt es auch unter Linux). Dann muss man eventuell noch beachtet das bei AMD jeder CPU-Kern seine eigene zeit hat. Da kann es schnell mal passieren das man eine negative Differenz hat wenn dazwischen ein core-wechsel stattgefunden hat.
A. K. schrieb: > http://www.cplusplus.com/reference/ctime/difftime/ Calculates the difference in seconds between beginning and end. und dann * 1000000 damit er Mikrosekunden hat?
Peter II schrieb: > und dann * 1000000 damit er Mikrosekunden hat? Klar. Gibt ne super Auflösung. Von Genauigkeit schrieb er nichts. ;-)
:
Bearbeitet durch User
Peter II schrieb: > Wenn es um exakte Zeitenmessungen geht nimmt man unter Windows z.b. > QueryPerformanceCounter (gibt es auch unter Linux). Dann muss man > eventuell noch beachtet das bei AMD jeder CPU-Kern seine eigene zeit > hat. Da kann es schnell mal passieren das man eine negative Differenz > hat wenn dazwischen ein core-wechsel stattgefunden hat. Da gibt es noch jede Menge weitere Sachen zu beachten (z.B. Taktreduktion zur Stromersparnis oder zur Vermeidung von Überhitzung oder dynamische Übertaktung, wenn gerade CPU-Kerne ungenutzt sind), weshalb man diese Counter am besten gar nicht nutzt. Für genaue Zeiten kann man unter Linux clock_gettime(CLOCK_MONOTONIC,...) verwenden. Unter Windows gibt's sicher vergleichbares.
Rolf Magnus schrieb: > Peter II schrieb: >> Wenn es um exakte Zeitenmessungen geht nimmt man unter Windows z.b. >> QueryPerformanceCounter (gibt es auch unter Linux). Dann muss man >> eventuell noch beachtet das bei AMD jeder CPU-Kern seine eigene zeit >> hat. Da kann es schnell mal passieren das man eine negative Differenz >> hat wenn dazwischen ein core-wechsel stattgefunden hat. > > clock_gettime(CLOCK_MONOTONIC,...) verwenden. Unter > Windows gibt's sicher vergleichbares. QueryPerformanceCounter ist das Gegenstück unter Windows. Das ist direkt von der CPU kommt wird dort schon der aktuelle Takt berücksichtig. Das muss man nicht selber machen.
Klaus Wachtler schrieb: > 2. Vor allem würde man dann solche peinlichen Antworten vermeiden, wie > sie in diesem Thread leider wieder vorkommen. > > Seit wann stehen in time_t überhaupt Millisekunden drin? > In der Regel ist das eben nicht der Fall. Eben daher kommen meine "peinlichen" Antworten. Die Frage ist sowas von weit weg von irgend einem erkennbaren Verständnis des Problems, und völlig frei von allen weiteren Hinweisen, was denn überhaupt schon vorhanden ist, daß es da nur völlig sinnlose Antworten geben kann. lmgtfy ist ja leider hier im Forum nicht mehr verwendbar. Oliver
Peter II schrieb: > QueryPerformanceCounter ist das Gegenstück unter Windows. Das ist > direkt von der CPU kommt wird dort schon der aktuelle Takt > berücksichtig. Das muss man nicht selber machen. So wie ich das verstehe, ist es von der Rechner-Hardware und der Betriebssystemversion abhängig, woher QueryPerformanceCounter seinen Wert bekommt. Wenn vorhanden, nutzt es wohl den HPET. Siehe http://msdn.microsoft.com/en-us/windows/hardware/gg463347.aspx
Rolf Magnus schrieb: > Peter II schrieb: >> QueryPerformanceCounter ist das Gegenstück unter Windows. Das ist >> direkt von der CPU kommt wird dort schon der aktuelle Takt >> berücksichtig. Das muss man nicht selber machen. > > So wie ich das verstehe, ist es von der Rechner-Hardware und der > Betriebssystemversion abhängig, woher QueryPerformanceCounter seinen > Wert bekommt. Wenn vorhanden, nutzt es wohl den HPET. > Siehe http://msdn.microsoft.com/en-us/windows/hardware/gg463347.aspx klar ist es von der Hardware abhängig. Aber Änderung der Taktrate wird bei alles quellen berücksichtig. (bestimmt gibt es da auch irgendwelche bugs wo es Abweichungen geben kann) aber das wird unter Linux nicht anders sein, sie müssen sich auch auf die Hardware verlassen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.