Comment les programmes sous Windows se rétablissent-ils en cas de non-réponse ?


Les applications sous Windows, contrairement aux applications DOS, sont pilotées par les événements, c'est-à-dire qu'elles attendent les événements et y réagissent. Chaque application dans Windows a une procédure de fenêtre que le système d'exploitation appelle chaque fois qu'il a un événement d'entrée pour cette fenêtre.

Le sous-système de fenêtrage dans Windows a une minuterie interne qui vérifie si une fenêtre de niveau supérieur prend plus de 5 secondes pour distribuer les messages envoyés à leur procédure de fenêtre. Il'existe une API pour vérifier cela également : Fonction IsHungAppWindow


Les principales causes pour qu'une application ne réponde pas est qu'elle effectue un travail lourd sur son thread UI ou s'il y a beaucoup d'activité E/S sur le système (par exemple, le système est à court de mémoire virtuelle).

La plupart des états de "non-réponse" sont réversibles. Chaque fois que la charge du système diminue, l'application sera finalement capable de suivre ses messages d'événements. Si l'application se bloque à cause d'un bug logiciel, le gel est irréversible et vous devez tuer l'application.

Trivial : Vous avez peut-être remarqué que lorsqu'une fenêtre est gelée, vous pouvez encore la déplacer. Comment pouvez-vous faire cela, si elle ne peut pas répondre aux messages de l'interface utilisateur ? C'est un artefact. En fait, Windows cache la fenêtre gelée et la "remplace" par une fenêtre "fantôme" qui a le même contenu et la même position que la fenêtre qui ne répond pas.

.