这个问题有关的计时器,用于windows服务 让我想到:

说我有(我)windows服务,这就是等待 线程 当意识到,潜入一个等待旋如我所示,下面的流程图

等待旋图http://www.86th.org/waitspin.jpg

我很好奇如果使用计时器将会比一个更好的 等待旋循环 (有时称为旋等).我会说实话,我从来没有使用定时器的任何其他比我自己的修修补补。

我没有任何计划开除的差异是深远的好处使用计时器是惊人的。然而,我非常感兴趣各国人民的想法在一个与其他的未来发展这个项目。

如果让我知道这应该是维基

有帮助吗?

解决方案

我不明白你得到任何好处了计时器。你基本上表现为一个定时器反正你的睡眠打电话来,你不被带宽猪,因为睡眠产生了时间片。有一个明确的定时唤醒和打电话给你仅仅是将代码复杂化。

我真的不能说,你正在做一个自旋等待,因为我觉得一般的自旋等待的东西,不睡觉。它只是燃烧一切的处理器时间等待通行信号。

其他提示

睡眠线程和等待与超时的手柄基本上是覆盖下同样的事情。我猜想,计时器使用睡眠本质上实现的,所以没有太大的区别在那里,无论是。换句话说,你可以通过在一个单一的环带超时等待的手柄和检查,看看为什么等待被释放(数据可用或超时),而不是实施独立的等待和睡眠循环简化代码。略高于独立循环更有效。

在理想情况下,你就不会在所有使用睡眠,只是依赖于数据代码正确提高你的消费代码正在等待,有长长的超时处理当事件源已经消失的事件。

如果数据是外部的,例如插口或其他输入设备上,则该把手通常可以设置为允许等待数据变得可用 - 不需要在这种情况下轮询,因为事件总是会发出信号时数据准备好用于消费。

我们使用线程。他们不仅执行像一个计时器,但他们给我们一个手柄来执行其他操作,而线程处于休眠状态。

我认为这真的取决于你的要求:

  1. 执行任务 5分钟(例如, 12:00, 12:05, 12:10, ...)
  2. 在完成当前任务,运行的下一个任务 5分钟。

计时器似乎很容易的情况1和线。睡觉似乎是容易的2的情况下,即使时器和线。睡眠可以做他们两个。

我,事实上,把一个较长的评论(包括一些考虑的情况下1)对一个类似的问题(Windows服务计划的执行).

轮询是坏的,几乎总是可以避免的。偶尔为琐碎的事情,它比复杂性需要,以避免它不那么糟糕。

什么来源是您轮询“有数据?”你不能变成某种手柄等待?

另外,不要在任何时间显著量严重代码(如服务)Sleep()。唯一阻止你能做的就是WaitFor[Single|Multiple]Objects(...)其中把手的列表包括被触发时,它的时间关闭过程中的事件。到处找你打电话Sleep(millisec)WaitForSingleObjects(g_shutdownEvent, millisec)取代它。

由于雷蒙德陈解释说, “是啊,什么的。” 如果你不能想出一个办法来获得的通知的时候你的数据准备好 - 那么你的SOL

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top