5

別のマシン A からマシン B へのタイムスタンプ文字列 (たとえばhh:mm:ss.fff) が与えられ、両方のマシンのクロックが同期されていると仮定すると、マシン B にそのクロックとマシン A からの文字列の時間の間のタイムスパンを計算させるにはどうすればよいですか?

と比較してみましDateTime.Now.Ticksたが、解像度は10~20msのようです。1ミリ秒の解像度に近い計算をしたいと思います。

しばらくの間、Stopwatch.GetTimestamp()高解像度のタイミングを使用することに成功しましたが、マシン B でしか文字列を使用できずStopwatch.GetTimestamp、実際のシステム時間で調整する優れた方法がないため、それほど単純ではないことに注意してください。

4

2 に答える 2

3

DateTime.Now は、基礎となる OS の日付を使用します。これは、約 15 ミリ秒の解像度を持ち、Windows XP より前のシステムではさらに悪化します。あなたが得ることができる最高のものは、ストップウォッチとそのティック/クロックで正確に利用可能な高解像度タイマーです.

最初にクロックを同期する必要がありますが、それは「システムの日付を設定する」という意味ではありません。クロックの同期とは、読み取り値の差を計算し、必要に応じて時間が経過しても一定であるかどうかを検証し (つまり、他のクロックよりも速くカウントするクロックがないかどうかを確認します) 、計算されたオフセットを使用して読み取り値をオフセットすることを意味します。 「実際の値」は、同じ時間ベースで相対的です。これはあなたの選択です。

Google で「クロック同期アルゴリズム」を検索して、詳細を確認してください。

于 2013-01-07T18:11:29.567 に答える
2

次のようなことはできませんか。

  • マシン A で Stopwatch.GetTimestamp() を呼び出す
  • 結果をマシン B に送信する
  • マシン B で Stopwatch.GetTimestamp() を呼び出す
  • 結果をマシン A に送信
  • マシン A で Stopwatch.GetTimestamp() を呼び出す
  • 調整係数の計算 (マシン A の平均結果とマシン B の結果の差)
  • マシン A とマシン B のその後の結果を比較するときに、この調整係数を使用します。
于 2013-07-22T19:15:35.880 に答える