Las aplicaciones en Windows, a diferencia de las aplicaciones en DOS, se basan en eventos, es decir, esperan los eventos y reaccionan a ellos. Cada aplicación en Windows tiene un procedimiento de ventana que el sistema operativo llama cada vez que tiene un evento de entrada para esa ventana.
El subsistema de ventanas en Windows tiene un temporizador interno que comprueba si una ventana de nivel superior tarda más de 5 segundos en despachar los mensajes enviados a su procedimiento de ventana. También hay una API para comprobarlo: Función IsHungAppWindow
Las principales causas de que una aplicación no responda es que esté haciendo un trabajo pesado en su hilo de interfaz de usuario o si hay mucha actividad de E/S en el sistema (por ejemplo, el sistema se está quedando sin memoria virtual).
La mayoría de los estados de «no respuesta» son reversibles. Siempre que la carga del sistema disminuya, la aplicación podrá eventualmente mantener el ritmo de sus mensajes de eventos. Si la aplicación se bloquea a causa de un error de software, la congelación es irreversible y debe matar la aplicación.
Trivia: Puede haber notado que cuando una ventana está congelada todavía puede moverla. ¿Cómo puede hacer eso, si no puede responder a los mensajes de la interfaz de usuario? Es un artefacto. Windows en realidad oculta la ventana congelada y la «sustituye» por una ventana «fantasma» que tiene el mismo contenido y posición que la ventana que no responde.