Come fanno i programmi in Windows a riprendersi dalla mancata risposta?

Le applicazioni in Windows, a differenza delle applicazioni DOS, sono guidate dagli eventi, cioè aspettano gli eventi e reagiscono ad essi. Ogni applicazione in Windows ha una procedura finestra che il sistema operativo chiama ogni volta che ha un evento di input per quella finestra.

Il sottosistema di windowing in Windows ha un timer interno che controlla se una finestra di livello superiore impiega più di 5 secondi per spedire i messaggi inviati alla loro procedura finestra. C'è anche un'API per controllare questo: IsHungAppWindow function

Le cause principali per cui un'applicazione non risponde è che sta facendo un lavoro pesante sul suo thread UI o se c'è molta attività I/O sul sistema (per esempio, il sistema sta finendo la memoria virtuale).

La maggior parte degli stati di "non risposta" sono reversibili. Ogni volta che il carico del sistema diminuisce, l'applicazione alla fine sarà in grado di stare al passo con i suoi messaggi di evento. Se l'applicazione si blocca a causa di un bug software, il blocco è irreversibile ed è necessario chiudere l'applicazione.

Trivia: Potreste aver notato che quando una finestra è bloccata potete ancora muoverla. Come potete farlo, se non può rispondere ai messaggi dell'UI? È un artefatto. Windows nasconde effettivamente la finestra congelata e la "sostituisce" con una finestra "fantasma" che ha lo stesso contenuto e posizione della finestra che non risponde.