什么 .NET 对象(或技术)在每 XXX 毫秒启动一个线程时最精确?有哪些权衡?
例如:
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.Threading.Timer
- 线程连接
- .NET 4.0 任务
- 线程.睡眠()
- Monitor.Wait(obj, 时间跨度)
- 多媒体定时器(感谢 Brian Gideon)
- Win32 高分辨率计时器
- 还有什么?