2009-06-10 12 views

Respuesta

22

A struct timeval representa un tiempo como un número de segundos (tv_sec) más un número de microsegundos (tv_usec) entre 0 y 999.999. Por lo tanto, para representar a 10 milisegundos, se utilizaría 10.000 microsegundos, como usted sugiere:

struct timeval tv; 
tv.tv_sec = 0; 
tv.tv_usec = 10000; 
+0

+1 para configurar ambos campos de la hora. – RBerteig

+2

Solo un pequeño punto. De acuerdo con http://www.gnu.org/s/hello/manual/libc/Elapsed-Time.html, el valor de tv_usec siempre es inferior a un millón, es decir, entre 0 y 999.999. De lo contrario, podría representar un segundo en los campos tv_sec y tv_usec, lo cual no tiene sentido según su definición. – binarybob

+0

@binarybob buen punto, no tan pequeño en realidad si tiene que asignar buffer de char del tamaño correcto para microsegundos – 4pie0

5

Es

struct timeval { 
    int tv_sec; // seconds 
    int tv_usec; // microseconds! 

ahora.

tv_sec = 0; 
tv_usec = 10000; 

` estaría bien

+0

Excepto que el campo tv_sec es (probablemente) no inicializado y, por lo tanto, probablemente no sea cero. Sería más seguro establecerlo explícitamente en cero para que la intención sea clara. – RBerteig

+0

Pero, en este caso, tv_sec no se inicializaría correctamente, lo que puede crear problemas. O memset() o asigne cero a tv_sec. – bortzmeyer

+0

Sí, estoy de acuerdo, lo arreglé. – Silfverstrom

8

Para un caso más general para convertir milisegundos para uso timeval estructura:

int milliseconds = 10; 
struct timeval now; 
now.tv_sec = milliseconds/1000; 
now.tv_usec = (milliseconds % 1000) * 1000; 
Cuestiones relacionadas