2009-10-24 7 views
10

struct timeval repräsentiert und sofort mit zwei Mitgliedern, tv_sec (Sekunden) und tv_usec (Mikrosekunden). In dieser Darstellung ist tv_usec nicht von selbst eine absolute Zeit, es ist eine Subsekundenverschiebung von tv_sec.Gibt es eine Standardmethode, um eine Struktur timeval in eine struct timepec umzuwandeln?

struct timespec funktioniert auf die gleiche Weise, außer dass anstelle von Mikrosekunden der Offset (tv_nsec) in Nanosekunden-Einheiten gespeichert wird.

Die Frage ist: Gibt es einen Standard Weg, zwischen diesen beiden zu konvertieren?

Antwort

13

Betrachtet man this doc, würde ich denken multiplizieren tv_usec von 1000 ist ausreichend, um tv_nsec zu erhalten.

Wichtiger, ich vermute, ist die Quelle der verschiedenen Strukturen: Sie könnten durch verschiedene Uhren gefüllt werden.

+0

Da tv_nsec ein Unter ist an zweiter Stelle versetzt ist, was passiert, wenn die Multiplikation mit 1000 ergibt einen Wert größer als 1 Milliarde ... Müssten Sie dann nicht 1 zu tv_sec hinzufügen und dann tv_nsec auf den Wert über 1 Milliarde setzen? – dicroce

+9

Nein, weil 'tv_usec', ein Offset in Mikrosekunden, garantiert kleiner als 1 Million ist, also multipliziert mit 1000 ergibt das einen Wert von weniger als 1 Milliarde. – JaakkoK

+1

Und wenn du von einer Zeitangabe zu einer Zeitangabe wechseln willst, dann teilst du 'tv_nsec' durch 1000, um' tv_usec' zu erhalten (möglicherweise addiere 500 zuerst, um aufzurunden). –