Que dois-je utiliser pour remplacer gettimeofday() sur Windows?
Je suis en train d'écrire un portable Socket classe qui prend en charge les délais pour l'envoi et de la réception... Pour mettre en œuvre ces délais d'attente, je suis en utilisant select()
.... Mais, j'ai parfois besoin de savoir combien de temps j'ai été bloqué à l'intérieur du select()
qui bien sûr sur Linux je voudrais mettre en œuvre en appelant gettimeofday()
avant et après j'appelle select()
et puis, à l'aide de timersub()
pour calculer le delta...
Étant donné que select()
sur Windows accepte struct timeval
pour son délai d'expiration, quelle méthode dois-je utilisé pour remplacer gettimeofday() sur Windows?
OriginalL'auteur dicroce | 2009-11-04
Vous devez vous connecter pour publier un commentaire.
J'ai fini par trouver cette page: gettimeofday() sur windows [edit: lien supprimé car il pointe maintenant vers un site de publicité]. Qui a une pratique, dandy de la mise en œuvre de gettimeofday() sur Windows. Il utilise le
GetSystemTimeAsFileTime()
méthode pour obtenir une précision de l'horloge.Mise à jour: Voici un lien actif [edit: lien supprimé car il pointe maintenant vers un site de publicité] qui pointe à la mise en œuvre de l'OP visée. Notez également qu'il y a une faute de frappe dans la mise en œuvre:
Les valeurs indiquées sont manquantes supplémentaires
0
à la fin (ils ont supposé microsecondes, et non pas le nombre d'intervalles de 100 nanosecondes). Cette faute de frappe a été trouvé via ce commentaire sur Google code de la page du projet. Les valeurs correctes à utiliser sont indiquées ci-dessous:PostgreSQL mise en œuvre de gettimeofday pour windows:
Le second lien est également aujourd'hui brisé.
Deuxième lien fixe: web.archive.org/web/20130406033313/http://suacommunity.com/...
Je suis sûr que ce est une question stupide, mais je ne peux pas trouver une réponse: où puis-je trouver c.h?
Notez que cette fonction pauses après 2038. La solution est de s'assurer que le genre de timespec.tv_sec n'est PAS longue, mais une 64 bits (comme un uint64_t), et retirer le plâtre à long dans les deux dernières lignes.
OriginalL'auteur dicroce
Comment sur:
GetTickCount()
n'est pas très précis, mais sera probablement bien fonctionner. Si vous voyez beaucoup de 0, 16 ou 31 des intervalles de milliseconde, essayez de synchronisation sur des intervalles plus longs ou utiliser une fonction précise commetimeGetTime
.Ce que je fais habituellement est: est-ce
Quand avez-vous vu des Fenêtres de plus de 45 jours d'affilée? OK, oui qui a été déplacée...
fonction GetTickCount - Récupère le nombre de millisecondes qui se sont écoulées depuis que le système a été démarré, jusqu'à 49,7 jours.
OriginalL'auteur knight666
Dans votre cas, je voudrais utiliser la plate-forme indépendante std::horloge
il n'a pas dit qu'il a besoin d'un temps absolu de référence
OriginalL'auteur Shay Erlichmen
Vous pouvez consulter QueryPerformanceCounter et QueryPerformanceFrequency. Ce sont très haute résolution - jusqu'à une tique par dix cycles sur certains matériels anciens.
OriginalL'auteur Puppy