2009-10-24 4 views
10

struct timeval représente et instantané dans le temps avec deux membres, tv_sec (secondes) et tv_usec (microsecondes). Dans cette représentation, tv_usec n'est pas en soi un temps absolu, c'est un sous-second décalage de tv_sec.Existe-t-il un moyen standard de convertir un struct timeval en struct timespec?

struct timespec fonctionne de la même manière sauf qu'au lieu de microsecondes son décalage (tv_nsec) est stocké en unités nanosecondes.

La question est: existe-t-il un moyen standard de convertir entre ces deux?

Répondre

13

En regardant this doc, je pense que multiplier tv_usec par 1000 est suffisant pour obtenir tv_nsec. Plus important, je soupçonne est la source des différentes structures: ils pourraient être remplis par différentes horloges.

+0

Depuis tv_nsec est un sous second décalage, et si la multiplication par 1000 donne une valeur supérieure à 1 milliard ... N'auriez-vous pas besoin d'ajouter 1 à tv_sec, puis de mettre tv_nsec à un montant supérieur à 1 milliard? – dicroce

+9

Non car 'tv_usec', étant un décalage en microsecondes, est garanti être inférieur à 1 million, donc le multiplier par 1000 donne une valeur inférieure à 1 milliard. – JaakkoK

+1

Et si vous voulez passer d'un timespec à un timeval, divisez 'tv_nsec' par 1000 pour obtenir' tv_usec' (en ajoutant éventuellement 500 en premier, pour arrondir). –