Условия спящего режима системы
Если система определяет, что есть активность пользователя или приложения, она не будет входить в спящий режим. Система может обнаруживать определенные действия, такие как входные данные пользователя или сетевое взаимодействие. Однако существуют и другие действия, которые система не может обнаружить. Например, приложению презентации требуется экран для отображения. Однако может показаться, что приложение неактивно во время презентации, что приводит к отключению дисплея системой.
Чтобы уведомить систему о занятости приложения, используйте функцию SetThreadExecutionState . Эта функция не позволяет системе входить в спящий режим или отключать дисплей во время работы приложения.
Приложения презентации и мультимедиа должны вызывать функцию SetThreadExecutionState с ES_DISPLAY_REQUIRED , чтобы система знала, что не должна помещать устройство дисплея в спящий режим. Приложения для обработки событий, такие как средства для управления входящими факсами, должны вызывать SetThreadExecutionState с ES_SYSTEM_REQUIRED, обрабатывать событие, а затем очищать флаг, чтобы система вернется в спящий режим. Обратите внимание, что большинству приложений для повышения производительности не требуется использовать SetThreadExecutionState, так как система обычно может определять действия по входным данным пользователя.
Чтобы сохранить время с момента последнего ввода пользователя, система использует таймер простоя дисплея и таймер простоя системы. Система сравнивает таймеры простоя со значениями, настроенными в плане питания. Если значение таймера простоя дисплея больше, чем значение времени ожидания отображения, и потоки не запрашивали отображение путем вызова SetThreadExecutionState с ES_DISPLAY_REQUIRED, система отключает отображение. Аналогичным образом, если системный таймер простоя больше, чем значение времени ожидания системы, и никакие приложения не запрашивали систему путем вызова SetThreadExecutionState с ES_SYSTEM_REQUIRED, система переходит в спящий режим.
Система поддерживает количество приложений, которые вызвали SetThreadExecutionState. Система отслеживает каждый поток, вызывающий SetThreadExecutionState , и соответствующим образом настраивает счетчик. Если этот счетчик достигает нуля и не было входных данных пользователя, система переходит в спящий режим.
Если мощность низка, приложение может запросить вмешательство пользователя или запросить приостановку системы. Системную операцию можно приостановить с помощью функции SetSuspendState .
Если система автоматически просыпается (PBT_APMRESUMEAUTOMATIC), ни один из таймеров не имеет значения. Дополнительные сведения см. в разделе "События пробуждения системы".
Ввод спящего режима
Когда система переходит в спящий режим, она автоматически сохраняет состояние всей системы и всех приложений. Поэтому большинству приложений не нужно предпринимать никаких специальных действий. Приложения, которые должны выполнять определенные действия, прежде чем переходы системы могут регистрироваться для событий питания.
Когда система отправляет событие PBT_APMSUSPEND , каждое приложение имеет две секунды для выполнения любых необходимых действий, прежде чем система начнет переход в спящий режим. Приложения должны ограничить действия, которые они выполняют в ответ на это событие, чтобы убедиться, что они выполняют все операции в течение выделенного времени.
Связанные темы