Criteri di sospensione del sistema
Finché il sistema determina che esiste un'attività utente o applicazione, non entrerà in sospensione. Il sistema può rilevare determinate attività, ad esempio l'input dell'utente o le comunicazioni di rete. Esistono tuttavia altre attività che il sistema non può rilevare. Ad esempio, un'applicazione di presentazione richiede la schermata per la visualizzazione. Tuttavia, potrebbe sembrare che l'applicazione sia inattiva durante la presentazione, causando la disattivazione dello schermo da parte del sistema.
Per notificare al sistema che l'applicazione è occupata, usare la funzione SetThreadExecutionState . Questa funzione impedisce al sistema di entrare in sospensione o disattivare la visualizzazione durante l'esecuzione dell'applicazione.
Le applicazioni di presentazione e multimediali devono chiamare la funzione SetThreadExecutionState con ES_DISPLAY_REQUIRED in modo che il sistema sappia che non deve mettere in sospensione il dispositivo di visualizzazione. Le applicazioni di gestione degli eventi, ad esempio gli strumenti per la gestione dei fax in ingresso, devono chiamare SetThreadExecutionState con ES_SYSTEM_REQUIRED, gestire l'evento e quindi cancellare il flag in modo che il sistema possa tornare in sospensione. Si noti che la maggior parte delle applicazioni di produttività non deve usare SetThreadExecutionState perché il sistema può in genere determinare l'attività in base all'input dell'utente.
Per mantenere l'ora dall'ultimo input dell'utente, il sistema usa un timer di inattività di visualizzazione e un timer di inattività del sistema. Il sistema confronta i timer inattive con i valori configurati nel risparmio energia. Se il valore del timer di inattività dello schermo è maggiore del valore di timeout di visualizzazione e nessun thread ha richiesto la visualizzazione chiamando SetThreadExecutionState con ES_DISPLAY_REQUIRED, il sistema spegne lo schermo. Analogamente, se il timer di inattività del sistema è maggiore del valore di timeout di sistema e nessuna applicazione ha richiesto al sistema chiamando SetThreadExecutionState con ES_SYSTEM_REQUIRED, il sistema entra in sospensione.
Il sistema gestisce un conteggio delle applicazioni che hanno chiamato SetThreadExecutionState. Il sistema tiene traccia di ogni thread che chiama SetThreadExecutionState e modifica il contatore di conseguenza. Se questo contatore raggiunge zero e non è stato inserito alcun input dell'utente, il sistema entra in sospensione.
Se l'alimentazione è bassa, un'applicazione può richiedere l'intervento dell'utente o richiedere la sospensione del sistema stesso. È possibile sospendere l'operazione di sistema usando la funzione SetSuspendState .
Se il sistema si riattiva automaticamente (PBT_APMRESUMEAUTOMATIC), nessuno dei timer è rilevante. Per altre informazioni, vedere Eventi di riattivazione del sistema.
Entrata in sospensione
Quando il sistema entra in sospensione, manterrà automaticamente lo stato dell'intero sistema e di tutte le applicazioni. Pertanto, la maggior parte delle applicazioni non deve eseguire alcuna azione speciale. Applicazioni che devono eseguire azioni specifiche prima che le transizioni di sistema possano registrarsi per gli eventi di risparmio energia.
Quando il sistema invia un evento PBT_APMSUSPEND , ogni applicazione ha due secondi per eseguire le azioni necessarie prima che il sistema avvii la transizione alla sospensione. Le applicazioni devono limitare le azioni eseguite in risposta a questo evento per assicurarsi che completino tutte le operazioni nel tempo assegnato.
Argomenti correlati