Critères de veille système
Tant que le système détermine qu’il existe une activité d’utilisateur ou d’application, il n’entrera 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 sembler que l’application est inactive pendant la présentation, ce qui entraîne la désactivation de l’affichage par le système.
Pour informer 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 inactifs aux valeurs configurées dans le mode d’alimentation. Si la valeur du minuteur d’inactivité d’affichage est supérieure à la valeur de délai d’affichage et qu’aucun thread n’a demandé l’affichage en appelant SetThreadExecutionState avec ES_DISPLAY_REQUIRED, le système met hors tension l’affichage. De même, si le minuteur d’inactivité 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 appelées 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’aucune entrée utilisateur n’a été effectuée, le système entre en veille.
Si l’alimentation est faible, une application peut demander l’intervention de l’utilisateur ou demander au système de se suspendre lui-même. Vous pouvez interrompre le fonctionnement du système à l’aide de la fonction SetSuspendState .
Si le système se réveille automatiquement (PBT_APMRESUMEAUTOMATIC), aucun des minuteurs n’est pertinent. Pour plus d’informations, consultez Événements de mise en éveil du 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 d’entreprendre d’action particulière. Les applications qui doivent effectuer des actions spécifiques avant les transitions système peuvent s’inscrire aux événements d’alimentation.
Lorsque le système envoie un événement PBT_APMSUSPEND , chaque application dispose de deux secondes pour effectuer les actions nécessaires avant que le système ne commence la transition en veille. Les applications doivent limiter les actions qu’elles prennent en réponse à cet événement pour s’assurer qu’elles effectuent toutes les opérations dans le temps imparti.
Rubriques connexes