0

ローカルマシンの日付/時刻を使用して、実行されている時間を計算し、一定期間後に期限切れになるタイマーを設定するタイマークラスがあります。

ユーザーがシステム時間を変更すると、タイマーが突然期限切れになったと見なしたり、タイマーによって記録された時間が突然1時間ジャンプしたりするため、アプリケーションに大混乱が生じることがわかりました(たとえば)。

これらのタイマーは現在、マルチスレッド アプリケーションで使用されています。

タイマー/タイムアウトタイマーは、数秒から数日の間実行されます。

これらのタイミングの不一致を回避するにはどうすればよいですか?

4

3 に答える 3

1

見つけたイベントに加えて、システム時間の代わりにStopwatchなどを使用してタイミングを計ることができます。

于 2012-08-15T14:04:21.433 に答える
1

SystemEvents.TimeChanged イベントを使用して、この通知を受け取ることができます。

また、マシンのタイム ゾーンや夏時間の規則が変更されることについても、少し心配する必要があります。.NET は、datetime が初めて取得されるときにゾーンをロックすることで、タイマーに大きな混乱が生じないようにします。つまり、絶対時間ではなく、プログラムされた間隔でタイマーが期限切れになるようにします。それが問題である場合 (テスト)、CultureInfo.ClearCachedData() (TimeZone および DateTime の場合) と TimeZoneInfo.ClearCachedData() (TimeZoneInfo および DateTimeOffset の場合) を呼び出して、その状態を明示的にクリアする必要があります。

マシンのクロックが調整されると、うまくいかない可能性のある他の多くのことがあります。たとえば、ファイル システムのタイムスタンプ。Linux のうるう秒バグは、最近の興味深い出来事でした。タイム サーバーから簡単に取得できる、信頼できるタイム ソースを持つことは、マシンの動作を維持するために非常に重要です。

于 2012-08-15T18:04:19.733 に答える
0

SOに何かを投稿するまで、Google検索が常に失敗するのはどうしてですか? 他の誰かがこのようなことをしたい場合に備えて、使用できるシステム イベントがあることがわかりました。

于 2012-08-15T09:08:45.877 に答える