Что происходит с таймером после выхода из режима ожидания? - PullRequest
0 голосов
/ 22 мая 2010

В моей C # -программе есть windows.forms.timer, который запускает все 24 часа для фоновой задачи. В течение дня я несколько раз переводил свою Vista 64bit в режим ожидания (никогда не выключал ее). Кажется, что после пробуждения таймер сбрасывается.

Ответы [ 3 ]

3 голосов
/ 22 мая 2010

Ваш таймер не должен быть включен каждые 24 часа, он должен быть включен каждые несколько секунд или минут и проверять время. Если время больше или равно времени, когда вы хотите, чтобы ваша задача выполнялась, выполните ее.

1 голос
/ 22 мая 2010

Класс Timer очень спокоен за то, что поднял событие Tick.Внутренне, внутри кода Windows, когда таймер должен быть установлен, он только устанавливает внутренний флаг, что-то вроде «должен доставить WM_TIMER».На самом деле этого не происходит до тех пор, пока в цикле сообщений не будет сделано ничего важного.Любое сообщение получает более высокий приоритет, чем WM_TIMER.

Когда цикл сообщений Windows Forms вызывает GetMessage (), функция проверяет, нужно ли что-либо возвращать.Если ответ «ничего» и установлен флаг, он предоставляет WM_TIMER.И вы получите событие Tick.

Пара следствий этого: вы можете никогда использовать событие Tick для отслеживания времени.Это неизбежно отстанет.Вы можете никогда получить событие Tick дважды подряд, оно не наверстает упущенное.Но имеет отношение к вашему вопросу: цикл сообщений не прокачивается, когда машина переходит в режим ожидания, ничего особенного не происходит.

0 голосов
/ 22 мая 2010

Обычно в режиме ожидания память сохраняется как есть, а затем вызывается при пробуждении аппарата, что может привести к тому, что таймер не будет тикать в режиме ожидания или иметь неточное поведение по сравнению с тем, что вы намеревались.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...