Bluetoothを使用して通信するiPhoneアプリをデバッグしようとしています。私は基本的に、デバイスがミリ秒までの時間を合意する必要があるかどうか疑問に思っています。CFAbsoluteTimeGetCurrent()を使用して一方のデバイスから送信されたメッセージにスタンプを付け、メッセージが到着したときにもう一方のデバイスのCFAbsoluteTimeGetCurrent()からメッセージを減算しています。それらがその粒度に同期していると想定しても安全ですか?メッセージの時間を計る別の方法はありますか?
質問する
1137 次
2 に答える
1
タイミングがデバッグのみを目的としている場合は、おそらく価値がありませんが、アプリに同期クロックが必要な場合は、ウィキペディアのNTPの記事を参照してください。これらの手法のいくつかを使用して、非常に緊密に同期できるはずです。
BSDレイヤーを介してiPhoneにNTP機能が組み込まれているかどうかはわかりませんが、必要に応じてどこかでソースコードを入手できます。
于 2009-07-24T03:33:19.650 に答える
1
これらは各デバイスの時計に依存するため、ミリ秒の精度が得られるとは思えません。
考えられる戦略は、一連の初期ネットワークメッセージを使用して、2つのデバイスのクロックオフセットを把握することです。その後、ドリフトとクロックの変化を考慮に入れるために、この同期をときどき行うことができます。これがうまくいくかもしれない何かです(ここでブレインストーミングするだけです)...
A
B
現在のタイムスタンプを(send_time
)に送信しますB
現在のタイムスタンプで応答します(response_time
)A
応答(receive_time
)と見積もりを受け取る:latency = 0.5 * (receive_time - send_time)
offset = (response_time - send_time - latency)
于 2009-07-22T15:40:15.603 に答える