XXX ミリ秒ごとにスレッドを起動する際に最も正確な .NET オブジェクト (または手法) は何ですか? トレードオフは何ですか?
例えば:
int maxDurationMs = 1000;
while (true)
{
DateTime dt = DateTime.UtcNow;
DoQuickStuff()
TimeSpan duration1 = DateTime.UtcNow - dt;
int sleepTime = maxDurationMs - duration1.Milliseconds;
if (sleepTime > 0)
System.Threading.Thread.Sleep(sleepTime);
}
また
// CPU Intensive, but fairly accurate
int maxDurationMs = 1000;
while (true)
{
DateTime dt = DateTime.UtcNow;
DoQuickStuff()
while (true)
{
if (dt.AddMilliseconds(maxDurationMs) >= DateTime.UtcNow)
break;
}
}
同じことを行う別の方法ですが、精度とトレードオフの程度が異なります (CPU など)。
- System.Timer
- ディスパッチタイマー
- System.Threading.Timer
- スレッド結合
- .NET 4.0 タスク
- Thread.Sleep()
- Monitor.Wait(obj, タイムスパン)
- マルチメディア タイマー(Brian Gideon に感謝)
- Win32 高解像度タイマー
- 他の何か?