0 votes

Les résultats renvoyés par CFAbsoluteTimeGetCurrent() doivent-ils être précis sur tous les appareils ?

J'essaie de déboguer une application iPhone qui utilise le bluetooth pour communiquer. Je me demande essentiellement si les appareils doivent s'accorder sur l'heure à la milliseconde près. J'estampille le message lorsqu'il est envoyé par un appareil avec CFAbsoluteTimeGetCurrent() et je le soustrait de CFAbsoluteTimeGetCurrent() sur l'autre appareil lorsque le message arrive. Peut-on supposer qu'ils sont synchronisés à cette granularité ? Existe-t-il un autre moyen de chronométrer les messages ?

1voto

Daniel Dickison Points 15182

Ils dépendent de l'horloge de chaque appareil, donc, non, je doute que vous obteniez une précision à la milliseconde près.

Une stratégie possible consiste à essayer de déterminer les décalages d'horloge des deux appareils à l'aide d'une série de messages réseau initiaux. Vous pouvez effectuer cette synchronisation occasionnellement par la suite pour (essayer de) tenir compte de la dérive et des changements d'horloge. Voici une solution qui pourrait fonctionner (je ne fais que réfléchir)...

  1. A envoie l'horodatage actuel à B ( send_time )
  2. B répond avec son horodatage actuel ( response_time )
  3. A recevoir une réponse ( receive_time ) et des estimations :
    • latency = 0.5 * (receive_time - send_time)
    • offset = (response_time - send_time - latency)

1voto

Dustin Voss Points 776

Si le chronométrage ne sert qu'à des fins de débogage, cela n'en vaut probablement pas la peine, mais si votre application a besoin d'horloges synchronisées, vous pouvez jeter un coup d'œil à l'outil de gestion de la synchronisation des horloges. Article sur le NTP sur Wikipedia. Vous devriez être capable de vous synchroniser très étroitement en utilisant certaines de ces techniques.

Je ne sais pas si une fonctionnalité NTP est intégrée à l'iPhone par le biais de la couche BSD, mais vous pouvez récupérer le code source quelque part si vous en avez besoin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X