c# 精确到毫秒级别的delay
时间: 2024-10-09 11:00:36 浏览: 49
在C#中实现精确到毫秒级的延迟通常不直接使用`Thread.Sleep()`,因为它不保证精确的时间间隔。相反,可以使用`Stopwatch`类配合循环来达到这个目的。下面是一个示例程序[^2]:
```csharp
// 创建Stopwatch实例
Stopwatch stopwatch = new Stopwatch();
// 开始计时
stopwatch.Start();
// 主循环
int time = 0;
while (true)
{
// 使用Thread.Sleep与当前已消耗的时间差(这里加time变量)来实现更接近的延迟
Thread.Sleep(30 + time);
// 打印线程调度时间和已消耗时间
Console.WriteLine("线程调度时间:" + stopwatch.ElapsedMilliseconds);
// 如果已经超过了预定的时间(这里是50毫秒),更新time并继续等待直到50毫秒过去
if (stopwatch.ElapsedMilliseconds < 49)
{
time = stopwatch.ElapsedMilliseconds - 30;
}
else
{
time = 0;
}
// 当到达50毫秒时,打印实际的睡眠时间并重置Stopwatch
while (stopwatch.ElapsedMilliseconds <= 50)
{
}
Console.WriteLine($"睡眠时间:{stopwatch.ElapsedMilliseconds}毫秒");
stopwatch.Restart();
}
```
这段代码通过不断调整`Thread.Sleep()`的参数以补偿实际执行时间,从而实现了更接近指定时间间隔的延迟。
阅读全文