12
votes

Pourquoi TV_SEC et TV_USEC sont-ils significatifs pour déterminer la durée d'une minuterie?

La page manuelle GetItimer (2) affirme

TV_SEC et TV_USEC significatif pour déterminer le Durée d'une minuterie

Cela ne va pas dire pourquoi c'est. Dans de nombreux exemples que j'ai rencontrés, TV_SEC est simplement défini sur 0, tandis que TV_USEC reçoit une valeur raisonnable ou envers la valeur. Ces minuteries comptent-elles simultanément ou constituent le compte à rebours total TV_SEC + TV_USEC? Devrais-je utiliser les deux? Ni non plus?


2 commentaires

Je ne crois pas que la page de l'homme inclut "pourquoi sont ..."


Vous êtes un homme intelligent!


5 Réponses :


3
votes

Oui, le temps total est la somme des deux. TV_SEC est les secondes. Et TV_USEC est des microsecondes au-delà de cela.


1 commentaires

Donc, par exemple, si je leur ai donné des valeurs de 1 et 250000 respectivement, cela serait de 1,25 seconde?



3
votes

La structure est décrite cependant: xxx

comme vous le voyez, le temps total est TV_SEC + (1.0 / 1000000) * TV_USEC secondes. C'est pourquoi, lorsque vous avez besoin de fois moins d'une seconde que vous avez défini TV_USEC , lorsque vous avez besoin de fois plus de 1sec, vous définissez les deux (mais finalement finalement défini uniquement (code> TV_SEC ) < / p>


1 commentaires

peut-être TIME_T TV_SEC; SUSECONDS_T TV_USEC; ?



28
votes

the Page Man Documents Le TIMEVAL CODE> Structure:

struct timeval {
    long tv_sec;                /* seconds */
    long tv_usec;               /* microseconds */
};


2 commentaires

De plus, USEC n'est-il pas autorisé à dépasser 1 seconde?


POSIX ne semble pas spécifier de comportement pour tous les cas d'angle (TV_USEC <0, TV_NSEC <0, TV_USEC> 1000000, TV_NSEC> 1000000000), il est donc préférable de ne pas laisser cela arriver.



-2
votes

J'ai eu une fuite de mémoire à cause de cela, je n'ai pas réglé TV_USEC. Comaut prend une somme de ces deux valeurs et si vous n'initialisez pas l'un d'entre eux, la valeur de somme pourrait être aléatoire.


0 commentaires

0
votes

long int tv_usec C'est le reste de la durée écoulée (une fraction d'un Deuxièmement), représenté comme le nombre de microsecondes. C'est toujours moins d'un million.

TV_SEC gérera les secondes complètes, tandis que TV_USEC gère les microsecondes.

Les microsecondes se réinitialiseront à 0 lorsqu'il arrivera à son maximum (1 million) et incrémente les secondes comme un chronomètre normal.


0 commentaires