我需要简单的东西
while (true) {
DoJob();
// wait 1 ms
}
我应该使用Thread.Sleep(1)
吗?
我不确定使用Timer
因为Timer
本身的开销似乎有点超过1毫秒。
更新:我需要这个延迟,以确保我收到来自网络的最新信息,这是交易软件。我需要做一些事情然后我必须等待1毫秒才能看到会发生什么。我可以等待1.5毫秒,但不能等待3毫秒,那太多了。可以很少等待5或10 ms,但一般来说应该是〜1 ms
答案 0 :(得分:2)
编辑 - 更正“您将从睡眠状态获得的最大分辨率提升至约20毫秒,而不是100毫秒
关于即使您通过睡眠(1),您将从睡眠中获得的最高分辨率为100毫秒。
对于它的价值,计时器对此可能更有效 - 特别是如果你有超过1个线程休眠(如果你分配多个计时器,System.Threading.Timer将使用尽可能少的线程,他们将分享一个时间线程)(这来自Joe Duffy的并发编程书)
但更重要的是,你想做什么?如果您正在进行投票 - 需要等待某些事情发生,您可以使用更有效的方法来进行投票。如果您只是需要经常启动任务,那么计时器可能是您最好的选择。
如果你只想停一毫秒,请问为什么?您是否只是想确保您的线程产生其他进程?
答案 1 :(得分:2)
可能有另一种方法可以做到这一点。 Windows有一个高分辨率计时器。您可以在此处阅读:"How to: Use the high resolution timer"
我认为这不像常规计时器 - 它不会触发事件,你只是用它来测量高精度的时间。但是,你可以循环它,并在Millisecond通过时执行代码(你将一直消耗CPU)。此外,我同意Henk的评论,即Windows不是实时操作系统 - 您永远不知道操作系统何时会暂停您的线程。