1

我需要很简单的东西

while (true) {
    DoJob();
    // wait 1 ms
}

我应该使用Thread.Sleep(1)吗?我不确定是否使用Timer,因为它本身的开销似乎Timer比 1 毫秒多一点。

更新:我需要这个延迟来确保我收到了来自网络的最新信息,它是交易软件。我需要做点什么,然后我必须等待 1 毫秒才能看到会发生什么。我可以等待 1.5 毫秒,但不能等待 3 毫秒,那太长了。很少等待 5 或 10 毫秒是可以的,但通常应该是 ~1 毫秒

4

2 回答 2

2

编辑 - 更正了“您将从睡眠中获得的最分辨率约为 20 毫秒,而不是 100 毫秒

即使您通过了 Sleep(1),您从睡眠中退出的最高分辨率大约是 100 毫秒。

对于它的价值,计时器可能更有效 - 特别是如果您有超过 1 个线程处于休眠状态(如果您分配多个计时器,System.Threading.Timer 将使用尽可能少的线程,它们将共享一个计时线程)(来自 Joe Duffy 的并发编程书)

但更重要的是,你想做什么?如果您正在轮询——需要等待某事发生,您也许可以使用更有效的方法来做这件事。如果您只是需要经常启动一项任务,那么计时器可能是您最好的选择。

如果您只想停止一毫秒,请问为什么?您是否只是想确保您的线程屈服于其他进程?

于 2012-04-22T17:53:39.167 回答
2

可能有另一种方法可以做到这一点。Windows 有一个高分辨率计时器。你可以在这里阅读:“如何:使用高分辨率计时器”

我认为这不像常规计时器那样工作——它不会触发事件,你只是用它来高精度地测量已经过去了多少时间。但是,您可以循环它,并在经过一毫秒时执行代码(您将一直消耗 CPU)。此外,我同意 Henk 的评论,即 Windows 不是实时操作系统——您永远不知道操作系统何时会暂停您的线程。

于 2012-04-22T22:27:51.493 回答