gettimeofday - Syscall unter Linux - Probleme mit den Mikrosekunden



  • Hi,

    ich muss unter Linux einen Timer aufbauen. Möchte dazu den Syscall gettimeofday() verwenden. Ich nehme eine erste Zeit, speichere die Mikrosekunden, nehme dann eine zweite und berechne die Differenz.
    Das Problem liegt bei den Mikrosekunden. Die sind vom Typ long. Mein Linux weigert sich aber strikt, bei den Mikrosekunden mehr als 6 Stellen auf dem Bildschirm auszugeben (obwohl ichs auch schon mit unsigned long und mit %ld im printf versucht habe). Der Überlauf kommt auch viel zu früh. Wenn ich aus dem struct timeval die Sekunden auslesen habe ich keine Probleme. Der zeigt mir die 10stellig seit 1.1.1970 an. Nur bei den Mikrosekunden klappts nicht.
    Hat jemand ne Ahnung an was das liegen könnte?

    Vielen Dank schonmal!

    Gruß, Peter



  • Also, dass nicht genau die Mikrosekunden zurückgeliefert werden, könnte daran liegen, dass die Zeit nicht jede Mikrosekunde aktualisiert wird sondern in größeren Intervallen (kenne ich so von DOS her). Aber da das ja eigentlich eh mehr ein Linux-Problem ist und nichts mit Standard ANSI-C zu tun hat, verschieb ich dich mal ins Linux-Forum. Da kann man dir sicher besser weiterhelfen ;).



  • Dieser Thread wurde von Moderator/in AJ aus dem Forum ANSI C in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • jo, ich glaub auch IA32 wird alle 10ms der Timer aktualisiert. Das liegt aber an der Hardware



  • Verstehe ich da was falsch?

    Wie soll er dir mehr als 6 Stellige Mikrosekunden angeben, wenn die Sekunde genau 1000000 Mikrosekunden hat, also bei 999999 Mikrosekunden wieder auf 0 Mikrosekunden zurückgesetzt wird? 😕



  • hallo

    Also Mikrosekunden sind 10^-6 sekunden.
    Also springt nach 999999 Mikrosekunden die sekunden anzeige um und die Mikrosekunden fangen wieder bei 0 an. Deshalb werden dir die Mikrosekunden nur 6 stellig angezeigt.

    Ich hoffe ich hab dein Prob richtig verstanden, so frueh am Morgen 🤡

    Gruss
    C-Snoopy



  • Ich glaub ich hab die manpage falsch verstanden!
    In der manpage von gettimeofday steht, dass im struct timeval die Sekunden und Mikrosekunden seit der Epoche (1.1.1970) zurückgegeben werden.
    Ich hab das so verstanden, dass die Sekunden seit 1970 zurückgegeben werden und das ganze dann noch in Mikrosekunden seit 1970. Aber dann ist das wohl so gemeint, dass ich die Sekunden hab seit 1970 und die Mikrosekunden immer nur bis 1 Sekunde abgelaufen ist....

    Ok, danke!!

    Falls ich mich in meinem Text oben jetzt wieder irre, bitte mailen :))

    Gruß, Peter


Anmelden zum Antworten