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