2009-10-24 7 views
10

struct timeval representa e instantáneamente en el tiempo con dos miembros, tv_sec (segundos) y tv_usec (microsegundos). En esta representación, tv_usec no es en sí mismo un tiempo absoluto, es una desviación secundaria de tv_sec.¿Existe una forma estándar de convertir una struct timeval en struct struct timespec?

struct timespec funciona de la misma manera, excepto que en lugar de microsegundos su desplazamiento (tv_nsec) se almacena en unidades de nanosegundos.

La pregunta es: ¿Existe una forma estándar de conversión entre estos dos?

Respuesta

13

En cuanto a this doc, creo que multiplicar tv_usec por 1000 es suficiente para obtener tv_nsec.

Más importante, sospecho que es la fuente de las diferentes estructuras: podrían llenarse con diferentes relojes.

+0

Desde tv_nsec es un sub segundo desplazamiento, qué si la multiplicación por 1000 resultados en un valor superior a 1 mil millones ... ¿No sería necesario agregar 1 a tv_sec y luego establecer tv_nsec a la cantidad de más de mil millones? – dicroce

+9

No, porque 'tv_usec', que es un desplazamiento en microsegundos, garantiza que será menor que 1 millón, por lo que multiplicarlo por 1000 da un valor inferior a 1 mil millones. – JaakkoK

+1

Y si quiere pasar de una especificación de tiempo a una timeval, dividiría 'tv_nsec' por 1000 para obtener' tv_usec' (posiblemente agregando 500 primero, para redondear). –