Question

Je vais être le développement d'un petit serveur dédié en C / C ++ qui nécessite une disponibilité de toujours. J'ai cherché dans certaines fonctions de temps que le calendrier de milliseconde est nécessaire pour les calculs. J'ai 2 problèmes que je suis face à:

  1. En utilisant un entier de 32 bits pour stocker le nombre de millisecondes depuis l'opération a commencé à s'enrouler autour d'environ après 49 jours la remise à zéro. J'ai pensé à utiliser 64 bits entiers, en utilisant gettimeofday pour récupérer microsecondes mais cela me amène à la deuxième partie.

  2. Il ne semble pas y avoir de système standard appelle à obtenir millisecondes écoulées qui sont indépendants de la plate-forme

Que dois-je faire pour résoudre ces deux problèmes?

Était-ce utile?

La solution

  1. Utilisez un entier de 64 bits, en supposant que vous donne assez de temps

  2. Vous avez raison; il n'y a pas de norme. Une possibilité serait d'utiliser le rel="nofollow Boost bibliothèque de DateTime , trouver un autre tour ou rouler votre propre.

Bonne chance!

Autres conseils

Comme cela a déjà été dit, le premier problème que vous allez affronter va obtenir une milliseconde précise du temps fiable.

Je dois admettre que je suis un peu par étapes la question cependant.

Je peux comprendre la nécessité d'un timing précis (niveau milliseconde, même microseconde), mais une synchronisation au niveau 50 jours milliseconde semble ... étrange.

Vous devriez peut-être revoir votre besoin en premier lieu, mais il est rare d'avoir besoin de plus de 6 ou 7 chiffres significatifs ... et je crains que vous essayez d'obtenir une taille leur convient tout objet durée.

Peut-être que vous devriez plutôt classer vos durées:

  • quelques minutes à plus> utilisation de précision milliseconde
  • autre> utiliser la deuxième précision (le fameux comte depuis le 1er janvier 1970)

Parce que ... quel est le sens de 1/10 de seconde à l'échelle de 2 mois?

réponse à 1: Si le « timing milliseconde » que vous mesurez est sous environ 20 jours, vous pouvez soustrayez les fois que les valeurs non signées et vérifier le résultat en tant que valeur signée. Cela devrait donner le bon résultat avec des minuteries d'emballage (emballage de 0xffffffff à 0x00000000). Si votre timing est plus de 20 jours, vous avez besoin de plus de bits.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top