2016-10-25 2 views
1

Timerを実行する方法はありますか?C#タイマーは正確に完全な秒で始まります

stateTimer = new Timer(someCallback, null, 0, 1000); 

この1つは、各秒を繰り返して、すぐに起動しますが、問題は、私は13:14:15.230開始をもたらすことができるプログラムを実行すると、それは正確に開始されますです。

私は13:14:15.000を開始します。次のようなもの:

stateTimer = new Timer(someCallback, null, DateTime.Now.Date, 1000); 

これは可能ですか?

編集:私は1秒間隔が実際にその1秒以上(約1.02各反復)ずつ増加されることを気づいた

Console.WriteLine($"Time: {DateTime.Now.ToString("HH:mm:ss.fff")}"); 

:コンソールログを行った後

50回の反復後に1秒はスキップされます。私はタイマーを800msごとに走らせて問題を解決しました。理想的なソリューションではありませんが、動作し、2番目はスキップされません(同じ秒を2回トリガするのに問題はありません)。

stateTimer = new Timer(someCallback, null, 0, 800); 
+3

タイマーが正確に2番目に実行されないと、なぜ問題になるのですか? – ChrisF

+1

次回起動までにどれくらいの時間がかかるかを計算して、それ以上眠ってから起動してください。ただし、Windowsはリアルタイムオペレーティングシステムではないことに注意してください。あなたが指定した時間間隔、「十分に近い」のみ。なぜあなたはそれがこの種の正確である必要がありますか? –

+0

小数部分のない「秒」は、架空の理論的な概念であり、完全に恣意的です。 1人の人間(またはコンピュータ)が正確な/完全な秒と考えるもの、もう1人は2秒の真ん中にいると思います。なぜなら、2人を同期させることは不可能だからです。あなたがなぜこれが必要であるか有用であるかを説明できなければ、この質問は価値がない。 –

答えて

6

これは不可能です。それはあなたがタイマーコードの実行を開始することが良い考えであるとCPUがいつ思うかを正確に知ることを必要とするでしょう。たとえ残りの時間がThread.Sleepであっても、あなたが望むミリ秒でコードが実行されるということを意味するわけではありません。

フォーマットするためにこれを行う場合は、カスタムの日付/時刻形式を使用してください。

関連する問題