2009-07-22 6 views
0

ブルートゥースを使用して通信するiPhoneアプリをデバッグしようとしています。私は基本的に、デバイスがミリ秒までの時間に合意する必要があるかどうか疑問に思っています。 CFAbsoluteTimeGetCurrent()を使用して1つのデバイスから送信され、メッセージが到着したときに他のデバイスのCFAbsoluteTimeGetCurrent()からCFAbsoluteTimeGetCurrent()を差し引くと、メッセージがスタンプされます。彼らがその粒度に同期していると仮定することは安全ですか?メッセージを時間を割く別の方法がありますか?CFAbsoluteTimeGetCurrent()によって返される結果は、デバイス間で正確である必要がありますか?

答えて

1

これらは各デバイスのクロックに依存するため、いいえ、ミリ秒の精度を得ることはできません。

可能な戦略は、一連の初期ネットワークメッセージで2つのデバイスのクロックオフセットを調べることです。この同期は、ドリフトやクロックの変化を考慮して(試行して)後で行うことができます。ここで(ちょうどここブレーンストーミング)働くかもしれ何か...

  1. A

    が現在のタイムスタンプでBsend_time
  2. B回答に現在のタイムスタンプを送りだ(response_time
  3. A応答(receive_time)を受信し、見積もり:
    • latency = 0.5 * (receive_time - send_time)
    • offset = (response_time - send_time - latency)
1

タイミングはデバッグ目的でのみであれば、それはおそらくそれだけの価値はありませんが、あなたのアプリケーションのニーズがクロックを同期している場合、あなたはウィキペディアにNTP articleを見てかかることがあります。これらのテクニックのいくつかを使って非常に緊密に同期することができます。

iPhoneにBSDレイヤーを介して組み込まれたNTP機能があるかどうかはわかりませんが、必要に応じてどこかでソースコードを手に入れることができます。

関連する問題