9
votes

Obtenez l'heure actuelle, en millisecondes, en C?

Quelle est l'équivalence du système System.Currenttimemillis de Java () en C?

c

5 Réponses :


0
votes

Voir ce fil: http: // pobot. cprogramming.com/c-programmer/51247-Current-system-time-milliseconds.html

Il dit que la fonction TIME () est exacte en secondes et une précision plus profonde nécessite d'autres bibliothèques ...


0 commentaires

3
votes

Vérifiez TIME.H , peut-être quelque chose comme le GetTimeOdday () fonction.

Vous pouvez faire quelque chose comme xxx

alors vous pouvez extraire le temps en obtenant des valeurs de maintenant.tv_sec et maintenant.tv_usec < / code>.


1 commentaires

Et quelles unités sont maintenant.tv_sec et .tv_usec ?



1
votes

Il y a le Time () fonction, mais il renvoie des secondes, pas millisecondes. Si vous avez besoin de précision plus grande, vous pouvez utiliser des fonctions spécifiques à la plate-forme telles que Windows ' getSystemTimeasFileTime () ou * Nix's GeTtionOfday () < /a >.pen, vous ne vous souciez pas réellement de la date et de l'heure, mais je veux juste faire du temps l'intervalle entre deux événements, comme celui-ci: xxx

alors le C équivalent est horloge () . Sous Windows, il est plus courant d'utiliser Gettickcount () à cet effet.


0 commentaires

3
votes

sur des systèmes Linux et d'autres systèmes de type UNIX, vous devez utiliser clock_gettime (clock_mononic) . Si ce n'est pas disponible (par exemple, Linux 2.4), vous pouvez retourner à GetTimeOdday () . Ce dernier a l'inconvénient d'être affecté par les ajustements d'horloge.

sur Windows, vous pouvez utiliser QueryPerformEcanceCounter () .

Ce code des résumés de mines Tous de ce qui précède dans une interface simple qui renvoie le nombre de millisecondes comme int64_t. Notez que les valeurs millisecondes sont renvoyées uniquement pour une utilisation relative (par exemple, des délais d'attente) et ne sont pas relatifs à un moment particulier.


1 commentaires

Clock_Monotonic n'est pas tout à fait équivalent à la fonction Java, car la fonction Java est également affectée par des ajustements WallClock. C'est le bon choix pour les minuteries d'intervalle, bien sûr, mais si l'OP veut une heure d'accès wallclock, cela ne va pas aider.



2
votes
#include <sys/time.h>
/**
* @brief provide same output with the native function in java called
* currentTimeMillis().
*/
int64_t currentTimeMillis() {
  struct timeval time;
  gettimeofday(&time, NULL);
  int64_t s1 = (int64_t)(time.tv_sec) * 1000;
  int64_t s2 = (time.tv_usec / 1000);
  return s1 + s2;
}
I write this function just like System.currentTimeMillis() in Java, and they have the same output.

0 commentaires