首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# Thread.Sleep立即唤醒

C# Thread.Sleep立即唤醒
EN

Stack Overflow用户
提问于 2009-04-29 16:13:06
回答 4查看 1.2K关注 0票数 6

我正在使用下面的代码

代码语言:javascript
复制
Thread.Sleep(5);

在while循环的末尾。尝试在迭代之间获得5ms的延迟。

有时它会休眠16毫秒。我理解并接受这一点,因为这取决于CPU何时开始为线程提供服务。然而,一旦它在下一次迭代中被唤醒,它似乎会在睡眠调用之后立即被唤醒(我正在使用时间戳进行记录)。使用如此短的睡眠间隔而将其视为零有问题吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-04-29 16:15:31

你的问题就像在大多数现代机器上一样,DateTime.UtcNow的分辨率大约是10-15ms (尽管我看到文档说它是从NT3.5开始的大约10ms )。如果您想要更高分辨率的计时,请参阅Stopwatch类,特别是Stopwatch.GetTimestamp()

还要注意,秒表将只使用高精度计时器(如果它们可用) (Stopwatch.IsHighResolution将在运行时告诉您)。如果不是,它将回退到DateTime.UtcNow.Ticks。

票数 21
EN

Stack Overflow用户

发布于 2009-04-29 16:15:12

最有可能的是,问题只是你的计时器的分辨率有限。如果它只更新一次,比如每10ms更新一次,那么即使5ms已经过去了,你也会在一些迭代中看到相同的时间戳。

你用哪个计时器来生成你的时间戳?

票数 4
EN

Stack Overflow用户

发布于 2009-04-29 16:27:47

如果我没记错的话,NT时间切片是在NT内核中引入的,它仍然以与XP相同的方式活跃,它的运行时间正好在5ms左右。我们在构建一个实时应用程序时遇到了这个问题。你将无法持续获得5毫秒的睡眠时间。我们发现,你有时会得到10 - 16毫秒,有时没有毫秒,偶尔也很少会得到5毫秒。

我在大约5年前做了这些测试,所以事情可能从那时起就发生了变化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/803127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档