系统睡眠条件
只要系统确定存在用户或应用程序活动,它就不会进入睡眠状态。 系统可以检测某些活动,例如用户输入或网络通信。 但是,系统无法检测到其他活动。 例如,演示文稿应用程序需要屏幕进行显示。 但是,应用程序在演示文稿期间可能处于空闲状态,导致系统关闭显示。
若要通知系统应用程序正忙,请使用 SetThreadExecutionState 函数。 此函数可防止系统在应用程序运行时进入睡眠状态或关闭显示器。
演示文稿和多媒体应用程序必须使用 ES_DISPLAY_REQUIRED 调用 SetThreadExecutionState 函数,以便系统知道它不应将显示设备置于睡眠状态。 事件处理应用程序(如用于管理传入传真的工具)必须调用 SetThreadExecutionState 并 ES_SYSTEM_REQUIRED,处理事件,然后清除标志,以便系统可以返回睡眠状态。 请注意,大多数生产力应用程序不需要使用 SetThreadExecutionState,因为系统通常可以通过用户输入来确定活动。
为了保持自上次用户输入以来的时间,系统使用显示空闲计时器和系统空闲计时器。 系统将空闲计时器与电源计划中配置的值进行比较。 如果显示空闲计时器值大于显示超时值,并且没有线程通过调用 SetThreadExecutionState 和 ES_DISPLAY_REQUIRED来请求显示,则系统会关闭显示器。 同样,如果系统空闲计时器大于系统超时值,并且没有应用程序通过调用 具有 ES_SYSTEM_REQUIRED的 SetThreadExecutionState 来请求系统,则系统会进入睡眠状态。
系统维护调用 SetThreadExecutionState的应用程序计数。 系统跟踪调用 SetThreadExecutionState 并相应地调整计数器的每个线程。 如果此计数器达到零且没有任何用户输入,则系统会进入睡眠状态。
如果电源不足,应用程序可以请求用户干预或请求系统自行暂停。 可以使用 SetSuspendState 函数暂停系统作。
如果系统自动唤醒(PBT_APMRESUMEAUTOMATIC),则没有任何计时器是相关的。 有关详细信息,请参阅 系统唤醒事件。
进入睡眠
当系统进入睡眠状态时,它将自动保留整个系统和所有应用程序的状态。 因此,大多数应用程序不需要采取任何特殊作。 在系统转换之前需要执行特定作的应用程序可以注册电源事件。
当系统发送 PBT_APMSUSPEND 事件时,每个应用程序都有两秒的时间执行任何必要的作,然后系统开始转换到睡眠。 应用程序必须限制他们在响应此事件时执行的作,以确保他们在分配的时间内完成所有作。
相关主题