前の質問で、スレッドを 1 ミリ秒中断する方法を教えてください。1ミリ秒の遅延を導入するには、タイマーを使用する必要があると回答されました。
「作業を行う」必要があり、平均で 2 ミリ秒 (1 ~ 5 ミリ秒で問題ありません。最大で数百ミリ秒の極端な遅延が発生することはほとんどありません) 待ってから、もう一度作業を行う必要があります。前の反復がまだ終了していないときに新しい反復を開始しようとしないことが重要です。そのため、1 ~ 5 ミリ秒ごとに何かを行う必要はありません。反復間に 1 ~ 5 ミリ秒の遅延が必要です。
私はそれを使用してそれをやろうとしましたが、うまくいきSystem.Timers.Timer
ません:
using System;
using System.Diagnostics;
using System.Threading;
using System.Timers;
using Timer = System.Timers.Timer;
namespace TestTimer
{
class Program
{
static Timer refresh_timer;
private static int called;
private const int ITERATIONS = 100;
private static Stopwatch sw;
static void Main(string[] args)
{
refresh_timer = new Timer(1);
refresh_timer.AutoReset = false;
refresh_timer.Elapsed += OnRefreshTimedEvent;
sw = Stopwatch.StartNew();
refresh_timer.Start();
Thread.Sleep(10000);
}
static void OnRefreshTimedEvent(object source, ElapsedEventArgs args)
{
DoGateIteration();
}
private static void DoGateIteration()
{
//try
//{
// work here
called++;
//}
//finally
//{
if (called == ITERATIONS)
{
Console.WriteLine("Average iterations per second: " + ITERATIONS * 1000 / sw.ElapsedMilliseconds);
Console.WriteLine("Average iterations milliseconds: " + sw.ElapsedMilliseconds / ITERATIONS);
}
refresh_timer.Start();
//}
}
}
}
それは報告します:
Average iterations per second: 64
Average iterations milliseconds: 15
だからSystem.Timers.Timer
、私が必要とするほど正確ではないようです。おそらく試してみるべきですが、このタイマーには必要なプロパティがSystem.Threading.Timer
ありません。AutoReset
何を提案しますか?