2009-07-22 3 views
0

Ich versuche, eine iPhone-App zu debuggen, die Bluetooth für die Kommunikation verwendet. Ich frage mich im Grunde, ob die Geräte sich auf die Zeit bis zur Millisekunde einigen sollten. Ich stemple die Nachricht, wenn sie von einem Gerät mit CFAbsoluteTimeGetCurrent() gesendet wird, und subtrahiere die Nachricht von CFAbsoluteTimeGetCurrent() auf dem anderen Gerät, wenn die Nachricht eintrifft. Ist es sicher anzunehmen, dass sie mit dieser Granularität übereinstimmen? Gibt es eine andere Möglichkeit, die Nachrichten zu synchronisieren?Sollten die von CFAbsoluteTimeGetCurrent() zurückgegebenen Ergebnisse auf allen Geräten korrekt sein?

Antwort

1

Die hängen von der Uhr auf jedem Gerät ab, also, nein, ich bezweifle, dass Sie Millisekundengenauigkeit bekommen.

Eine mögliche Strategie besteht darin, die Taktoffsets der beiden Geräte mit einer Reihe von anfänglichen Netzwerkmeldungen auszuprobieren. Sie können diese Synchronisation gelegentlich ausführen, um Drift- und Taktänderungen zu berücksichtigen. Hier ist etwas, das funktionieren kann (nur hier Brainstorming) ...

  1. A sendet aktuelle Zeitstempel zu B (send_time)
  2. B Antworten mit seinem aktuellen Zeitstempel (response_time)
  3. A erhält Antwort (receive_time) und Schätzungen:
    • latency = 0.5 * (receive_time - send_time)
    • offset = (response_time - send_time - latency)
1

Wenn das Timing ist nur für Debugging-Zwecke, es ist wahrscheinlich nicht wert, aber wenn Sie Ihre App Bedürfnisse Uhren synchronisiert, Sie einen Blick auf die NTP article auf Wikipedia nehmen könnte. Sie sollten in der Lage sein, mit einigen dieser Techniken sehr genau zu synchronisieren.

Ich weiß nicht, ob es eine NTP-Funktionalität über die BSD-Schicht in das iPhone integriert ist, aber Sie können irgendwo Quellcode abholen, wenn Sie ihn brauchen.

Verwandte Themen