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 ?
Réponses
Trop de publicités?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)...
-
A
envoie l'horodatage actuel àB
(send_time
) -
B
répond avec son horodatage actuel (response_time
) -
A
recevoir une réponse (receive_time
) et des estimations :latency = 0.5 * (receive_time - send_time)
offset = (response_time - send_time - latency)
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.