Incrementi di priorità
Ogni thread ha una priorità dinamica. Questa è la priorità usata dall'utilità di pianificazione per determinare il thread da eseguire. Inizialmente, la priorità dinamica di un thread è la stessa della priorità di base. Il sistema può aumentare e ridurre la priorità dinamica, per assicurarsi che sia reattivo e che nessun thread sia bloccato per il tempo del processore. Il sistema non aumenta la priorità dei thread con un livello di priorità di base compreso tra 16 e 31. Solo i thread con priorità di base tra 0 e 15 ricevono incrementi di priorità dinamica.
Il sistema aumenta la priorità dinamica di un thread per migliorare la velocità di risposta, come indicato di seguito.
Quando un processo che usa NORMAL_PRIORITY_CLASS viene portato in primo piano, l'utilità di pianificazione aumenta la classe di priorità del processo associato alla finestra in primo piano, in modo che sia maggiore o uguale alla classe di priorità di tutti i processi in background. La classe priority restituisce l'impostazione originale quando il processo non è più in primo piano.
Quando una finestra riceve l'input, ad esempio messaggi timer, messaggi del mouse o input della tastiera, l'utilità di pianificazione aumenta la priorità del thread proprietario della finestra.
Quando vengono soddisfatte le condizioni di attesa per un thread bloccato, l'utilità di pianificazione aumenta la priorità del thread. Ad esempio, quando un'operazione di attesa associata al disco o alla tastiera I/O termina, il thread riceve un aumento della priorità.
È possibile disabilitare la funzionalità di aumento della priorità chiamando la funzione SetProcessPriorityBoost o SetThreadPriorityBoost . Per determinare se questa funzionalità è stata disabilitata, chiamare la funzione GetProcessPriorityBoost o GetThreadPriorityBoost .
Dopo aver generato la priorità dinamica di un thread, l'utilità di pianificazione riduce tale priorità per un livello ogni volta che il thread completa una sezione temporale, finché il thread non torna alla priorità di base. La priorità dinamica di un thread non è mai minore della priorità di base.