C++: Zeitdifferenz mit time_t

Gast #3511102
Lesenswert?

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
#3511158
Lesenswert?

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/
Gast #3511179
Lesenswert?

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.
#3511191
Lesenswert?

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.
Gast #3511195
Lesenswert?

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.
Gast #3511261
Lesenswert?

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.
Gast #3511269
Lesenswert?

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.
Gast #3511292
Lesenswert?

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
Gast #3511341
Lesenswert?

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
Gast #3511351
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren