イベント間に「ドリフト」がないことを保証できる C# で利用可能な .NET タイマーはありますか? つまり、タイマーを X 秒ごとにオフにするように設定した場合、何日も操作した後でもドリフトしないということです。
そうでない場合、これを行うために C# でタイマー関数をラップするよく知られたコード例はありますか?
あなたはすでに何かを試したと思います、そしてそれは漂っています。
時間(5,10,15,20 ..)から5秒ごとに何かを起動したい場合は、タイマーを1回起動するように設定してから、コールバックでタイマーをリセットしてDateTime.Now+で起動することができます。次の5秒間隔までの秒数。
これにより、時計が正しい限り、ドリフトを防ぐことができます。
このようなもの
System.Timers.Timer timer = new Timer();
void Init()
{
timer.Elapsed += timer_Elapsed;
int wait = 5 - (DateTime.Now.Second % 5);
timer.Interval = wait*1000;
timer.Start();
}
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
timer.Stop();
int wait = DateTime.Now.Second % 5;
timer.Interval = wait * 1000;
timer.Start();
}
申し訳ありませんが、Quartz.netへのリンクのみを提供しますが、これは完全に認定された、エンタープライズであり、テスト済みの...ライブラリです...車輪を再発明する必要はありません:)
オーバーヘッドについて心配している場合、オーバーヘッドの定義は何ですか? ファイルサイズ(バイナリは約0,5mb)またはロジックのオーバーヘッドです。ロジック部分については、IJob
インターフェースを実装することで、消費者のより良いコードを強制するのに適していると思います。私はインラインメソッドの大きな友人ではありません (例として、タイマーの経過時にポインターを起動する可能性があるため) - クラスはより多くの可能性を提供し、もう一度、より良い oop、ドメイン設計、.. .
しかし:Console.WriteLine(...)
quartz.netでやるのはやり過ぎです... :)