Criterios de suspensión del sistema
Siempre que el sistema determine que hay actividad de usuario o aplicación, no entrará en suspensión. El sistema puede detectar determinadas actividades, como la entrada del usuario o las comunicaciones de red. Sin embargo, hay otras actividades que el sistema no puede detectar. Por ejemplo, una aplicación de presentación requiere la pantalla para mostrarse. Sin embargo, puede parecer que la aplicación está inactiva durante la presentación, lo que hace que el sistema desactive la pantalla.
Para notificar al sistema que la aplicación está ocupada, use la función SetThreadExecutionState . Esta función impide que el sistema entre en suspensión o desactive la pantalla mientras se ejecuta la aplicación.
Las aplicaciones multimedia y de presentación deben llamar a la función SetThreadExecutionState con ES_DISPLAY_REQUIRED para que el sistema sepa que no debe poner el dispositivo de pantalla en suspensión. Las aplicaciones de control de eventos, como herramientas para administrar faxes entrantes, deben llamar a SetThreadExecutionState con ES_SYSTEM_REQUIRED, controlar el evento y, a continuación, borrar la marca para que el sistema pueda volver a suspensión. Tenga en cuenta que la mayoría de las aplicaciones de productividad no necesitan usar SetThreadExecutionState porque el sistema normalmente puede determinar la actividad por la entrada del usuario.
Para mantener el tiempo desde la última entrada del usuario, el sistema usa un temporizador de inactividad para mostrar y un temporizador de inactividad del sistema. El sistema compara los temporizadores de inactividad con los valores configurados en el plan de energía. Si el valor del temporizador de inactividad de visualización es mayor que el valor de tiempo de espera de visualización y no se ha solicitado la presentación ningún subproceso llamando a SetThreadExecutionState con ES_DISPLAY_REQUIRED, el sistema apaga la pantalla. Del mismo modo, si el temporizador de inactividad del sistema es mayor que el valor de tiempo de espera del sistema y ninguna aplicación ha solicitado el sistema llamando a SetThreadExecutionState con ES_SYSTEM_REQUIRED, el sistema entra en suspensión.
El sistema mantiene un recuento de aplicaciones que han llamado SetThreadExecutionState. El sistema realiza un seguimiento de cada subproceso que llama a SetThreadExecutionState y ajusta el contador en consecuencia. Si este contador alcanza cero y no ha habido ninguna entrada de usuario, el sistema entra en suspensión.
Si la energía es baja, una aplicación puede solicitar la intervención del usuario o solicitar que el sistema se suspenda. Puede suspender la operación del sistema mediante la función SetSuspendState .
Si el sistema se activa automáticamente (PBT_APMRESUMEAUTOMATIC), ninguno de los temporizadores es relevante. Para obtener más información, vea Eventos de reactivación del sistema.
Escribir suspensión
Cuando el sistema entra en suspensión, conservará automáticamente el estado de todo el sistema y todas las aplicaciones. Por lo tanto, la mayoría de las aplicaciones no necesitan realizar ninguna acción especial. Las aplicaciones que necesitan realizar acciones específicas antes de que las transiciones del sistema puedan registrarse para eventos de energía.
Cuando el sistema envía un evento de PBT_APMSUSPEND , cada aplicación tiene dos segundos para realizar las acciones necesarias antes de que el sistema inicie la transición a suspensión. Las aplicaciones deben limitar qué acción realizan en respuesta a este evento para asegurarse de que completan todas las operaciones en el tiempo asignado.
Temas relacionados
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de