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
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) ...
A
sendet aktuelle Zeitstempel zuB
(send_time
)B
Antworten mit seinem aktuellen Zeitstempel (response_time
)A
erhält Antwort (receive_time
) und Schätzungen:latency = 0.5 * (receive_time - send_time)
offset = (response_time - send_time - latency)
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.
- 1. Wie bleiben Lineal-Apps auf allen Geräten korrekt?
- 2. Browserverlauf von allen angemeldeten Geräten
- 3. Mehrere adb installieren auf allen angeschlossenen Geräten
- 4. Rechte Spalte unten auf allen mobilen Geräten
- 5. Unterlinks von Webview sind nicht auf allen Geräten geöffnet?
- 6. SQL Server vergleicht Ergebnisse von zwei Abfragen, die identisch sein sollten
- 7. Sollten Destruktoren threadsicher sein?
- 8. Excel: Zellen markiert, die nicht sein sollten
- 9. Sollten die Bedingungen auf positive oder negative Ergebnisse prüfen?
- 10. Sollten Metatags HTML-codiert sein?
- 11. Verwenden Sie Google Maps auf allen Geräten. (ohne Google Play)
- 12. Sollten JUnit-Tests javadocced sein?
- 13. Bestellungen anzeigen Hinzufügen von Elementen, die nicht dort sein sollten
- 14. Wie komplex sollten Rauchversuche sein?
- 15. Ist android Epochenzeit die gleiche in allen Geräten
- 16. Sollten enum Objekte staatenlos sein?
- 17. Beschränken Sie die Anzahl der in CloudKit zurückgegebenen Ergebnisse.
- 18. Push-Benachrichtigungen mit FCM funktioniert nicht auf allen meinen Geräten
- 19. App startet nicht beim Start auf allen Geräten
- 20. Wo sollten Makros wie HAVE_SYS_UIO_H definiert sein?
- 21. Was sind .recommenders und .metadata im Eclipse-Arbeitsbereich und sollten sie zwischen Geräten synchronisiert sein?
- 22. Android: SQLiteException: kein Fehler nicht auf allen Geräten
- 23. Seltsame SQLiteException nicht in allen Geräten
- 24. Zxing Qr Code-Scanner funktioniert nicht auf allen Geräten
- 25. Sollten die Eigenschaften meiner Akka-Darsteller @volatile sein?
- 26. OpenCL - Unterschiedliche Kernel "printf()" Ergebnisse auf verschiedenen Geräten?
- 27. Die beste Methode, um Bilder auf allen Geräten an derselben Stelle zu positionieren?
- 28. Sollten die Eigenschaften meiner Scala-Darsteller @volatile sein?
- 29. FXCop: "Typen, die Einwegfelder besitzen, sollten wegwerfbar sein"
- 30. Laufzeitfehler "x + width muss <= bitmap.width()" auf einigen Geräten sein