2009-06-10 8 views

Répondre

22

A struct timeval représente un temps un certain nombre de secondes (tv_sec) plus un certain nombre de microsecondes (tv_usec) entre 0 et 999999. Ainsi, pour représenter 10 millisecondes, vous devez utiliser 10.000 microsecondes, comme vous le suggérez:

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

+1 pour définir les deux champs de l'heure. – RBerteig

+2

Juste un petit point. Selon http://www.gnu.org/s/hello/manual/libc/Elapsed-Time.html, la valeur de tv_usec est toujours inférieure à un million, c'est-à-dire entre 0 et 999 999. Sinon, vous pourriez représenter une seconde dans les deux champs tv_sec et tv_usec, ce qui n'a pas de sens selon leur définition. – binarybob

+0

@binarybob bon point, pas si petit en fait si vous devez allouer char tampon de taille correcte pour microsecondes – 4pie0

5

il est

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

maintenant.

tv_sec = 0; 
tv_usec = 10000; 

` aurait droit

+0

Sauf que le champ tv_sec est (probablement) non initialisé et donc probablement pas zéro. Il serait plus sûr de le mettre explicitement à zéro afin que l'intention soit claire. – RBerteig

+0

Mais, dans ce cas, tv_sec ne serait pas correctement initialisé, ce qui pourrait créer des problèmes. Soit memset() ou assigner zéro à tv_sec. – bortzmeyer

+0

ouais je suis d'accord, l'a réparé. – Silfverstrom

8

Pour un cas plus général convertir les millisecondes à utiliser struct timeval:

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