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