从待机状态唤醒后会发生什么情况?

问题描述:

我的C#-programm有一个windows.forms.timer,可以为后台任务全部启动24h。 在一天中,我将Vista 64位多次置于待机模式(切勿关闭)。 看起来在唤醒后,定时器有点复位。从待机状态唤醒后会发生什么情况?

你的计时器不应该设置为每24小时发射一次,它应该设置为每隔几秒或几分钟发射一次,并检查时间。如果时间大于或等于您希望发生任务的时间,请执行该任务。

+0

很酷的想法,谢谢 – Henry99 2010-05-22 00:14:41

在待机期间,通常情况下,内存按原样存储,然后在唤醒机器时调用,这可能会导致您的计时器在待机期间不打勾,或者您的打算行为不准确。

+0

谢谢,这似乎很明显,你是对的。如果我每天停止使用我的系统12小时,计时器将每两天耗尽。 – Henry99 2010-05-21 23:38:18

Timer类对提高Tick事件非常轻松。在Windows代码的内部,当计时器到期时,它只设置一个内部标志,有点类似于“应该提供WM_TIMER”。这实际上并没有发生,直到消息循环不需要做任何重要的事情。任何消息获得比WM_TIMER更高的优先级。

当Windows窗体消息循环调用GetMessage()时,该函数检查是否需要返回任何内容。如果答案是“没有”并且标志被设置,它将提供WM_TIMER。你会得到Tick事件。

由此产生的几个后果:你可以从来没有使用Tick事件来跟踪时间。这将不可避免地落后。你可以从来没有连续两次得到Tick事件,它并没有赶上。但是与你的问题相关:当机器进入待机状态时,消息循环不会被泵送,没有什么特别的事情发生。