Critères de veille système
Tant que le système détermine qu’il existe une activité utilisateur ou application, il n’entre pas en veille. Le système peut détecter certaines activités, telles que l’entrée utilisateur ou les communications réseau. Toutefois, il existe d’autres activités que le système ne peut pas détecter. Par exemple, une application de présentation nécessite l’écran pour l’affichage. Toutefois, il peut apparaître que l’application est inactive pendant la présentation, ce qui entraîne la désactivation de l’affichage par le système.
Pour avertir le système que votre application est occupée, utilisez la fonction SetThreadExecutionState. Cette fonction empêche le système d’entrer en veille ou de désactiver l’affichage pendant l’exécution de l’application.
Les applications de présentation et multimédia doivent appeler la fonction SetThreadExecutionState avec ES_DISPLAY_REQUIRED afin que le système sache qu’il ne doit pas mettre l’appareil d’affichage en veille. Les applications de gestion des événements, telles que les outils de gestion des télécopies entrantes, doivent appeler SetThreadExecutionState avec ES_SYSTEM_REQUIRED, gérer l’événement, puis effacer l’indicateur afin que le système puisse revenir en veille. Notez que la plupart des applications de productivité n’ont pas besoin d’utiliser SetThreadExecutionState, car le système peut généralement déterminer l’activité par entrée utilisateur.
Pour conserver l’heure depuis la dernière entrée utilisateur, le système utilise un minuteur d’inactivité d’affichage et un minuteur d’inactivité système. Le système compare les minuteurs d’inactivité aux valeurs configurées dans le plan d’alimentation. Si la valeur du minuteur d’inactivité de l’affichage est supérieure à la valeur d’expiration d’affichage et qu’aucun thread n’a demandé l’affichage en appelant SetThreadExecutionState avec ES_DISPLAY_REQUIRED, le système désactive l’affichage. De même, si le minuteur d’inactivité du système est supérieur à la valeur de délai d’attente système et qu’aucune application n’a demandé au système en appelant SetThreadExecutionState avec ES_SYSTEM_REQUIRED, le système entre en veille.
Le système gère un nombre d’applications qui ont appelé SetThreadExecutionState. Le système suit chaque thread qui appelle SetThreadExecutionState et ajuste le compteur en conséquence. Si ce compteur atteint zéro et qu’il n’y a pas eu d’entrée utilisateur, le système entre en veille.
Si la puissance est faible, une application peut demander l’intervention de l’utilisateur ou demander que le système s’interrompe lui-même. Vous pouvez suspendre l’opération système à l’aide de la fonction SetSuspendState.
Si le système se réveille automatiquement (PBT_APMRESUMEAUTOMATIC), aucun minuteur n’est pertinent. Pour plus d’informations, consultez événements de mise en éveil système.
Entrée en veille
Lorsque le système entre en veille, il conserve automatiquement l’état de l’ensemble du système et de toutes les applications. Par conséquent, la plupart des applications n’ont pas besoin de prendre des mesures spéciales. Les applications qui doivent effectuer des actions spécifiques avant que les transitions système puissent s’inscrire aux événements d’alimentation.
Lorsque le système envoie un événement de PBT_APMSUSPEND, chaque application a deux secondes pour effectuer les actions nécessaires avant que le système démarre la transition vers le mode veille. Les applications doivent limiter l’action qu’ils prennent en réponse à cet événement pour s’assurer qu’elles terminent toutes les opérations dans le temps imparti.
Rubriques connexes
-
à propos de l' de gestion de l’alimentation