1

msdn で、タイマーは正確な間隔 (私の場合は 1 秒) で起動することを保証できませんが、間隔のに起動しないことを読みました。

一方の PC のタイマーは正常に動作しており (Windows 7)、もう一方の PC (Windows Server 2003) は0.99999936 seconds.

なぜこのようなことが起こっているのか、私は非常に興味があります。

newSeconds = newSeconds + delta.Seconds これに気づいたのは、 Where isまでの秒数を数えるコードdeltaがあったからですDateTime.Now - lastTime

秒の部分は1、Windows 7 および0Windows Server 2003 で表示されていました。

解決策は を読むだけでしたtotalsecondsが、それでもなぜ以前に発砲しているのか疑問に思います。

誰でもこれについて詳しく説明できますか?

編集

私は実際に2つの異なるWindows 2003 PCでそれが起こっています。私の疑問は、OS 間に違いがあるのか​​、7 と 2003 で .net フレームワーク 4 が異なるのか、さらに深く掘り下げますか? または、人々が知っている可能性のある他の逸脱はありますか? タイマーはどのように実装されていますか? ハードウェア関連の問題でしょうか?

そして、これとは 対照的に、インターバル時間の前に C# タイマーが起動します 。ティックごとに常に発生しています。長時間運転する必要はありません。ありがとう

編集

public void OnTick(object sender, EventArgs e)
{
    var delta = DateTime.Now - _lastTime;

    DoStuff

    _lastTime = DateTime.Now
}
4

2 に答える 2

0

リアクティブエクステンションを使用することをお勧めします。このブログ投稿の「時間の問題」の章を読んでください。

于 2012-10-31T01:59:19.107 に答える
0

この行:

newSeconds = newSeconds + delta.Seconds

真の尺度からますます遠ざかる可能性があり、おそらくそうなるでしょう。ものさしで 1 マイルを測定することを想像してみてください。

実際の時間の不一致は、イベントが発生してから時間を取得するまでのわずかな時間の結果である可能性があります。これらの 2 つのポイントの間には、いくつかの CPU サイクルが必要です。

于 2012-10-31T01:52:15.403 に答える