Systemmoduskriterien
Solange das System feststellt, dass Benutzer- oder Anwendungsaktivitäten vorhanden sind, wird es nicht in den Ruhezustand versetzt. Das System kann bestimmte Aktivitäten erkennen, z. B. Benutzereingaben oder Netzwerkkommunikation. Es gibt jedoch andere Aktivitäten, die das System nicht erkennen kann. Beispielsweise erfordert eine Präsentationsanwendung den Bildschirm für die Anzeige. Es kann jedoch vorkommen, dass sich die Anwendung während der Präsentation im Leerlauf befindet, sodass das System die Anzeige deaktiviert.
Verwenden Sie die SetThreadExecutionState-Funktion , um das System darüber zu benachrichtigen, dass Ihre Anwendung ausgelastet ist. Diese Funktion verhindert, dass das System in den Ruhezustand wechselt oder das Display ausschaltet, während die Anwendung ausgeführt wird.
Präsentations- und Multimediaanwendungen müssen die SetThreadExecutionState-Funktion mit ES_DISPLAY_REQUIRED aufrufen, damit das System weiß, dass das Anzeigegerät nicht in den Ruhezustand versetzt werden soll. Ereignisbehandlungsanwendungen, z. B. Tools zum Verwalten eingehender Faxe, müssen SetThreadExecutionState mit ES_SYSTEM_REQUIRED aufrufen, das Ereignis behandeln und dann das Flag deaktivieren, damit das System in den Ruhezustand zurückkehren kann. Beachten Sie, dass die meisten Produktivitätsanwendungen SetThreadExecutionState nicht verwenden müssen, da das System die Aktivität in der Regel durch Benutzereingaben bestimmen kann.
Um die Zeit seit der letzten Benutzereingabe beizubehalten, verwendet das System einen Anzeige-Leerlauftimer und einen System-Leerlauftimer. Das System vergleicht die Leerlauftimer mit den im Energiesparplan konfigurierten Werten. Wenn der Wert des Anzeige-Leerlauftimers größer als der Anzeigetimeoutwert ist und keine Threads die Anzeige durch Aufrufen von SetThreadExecutionState mit ES_DISPLAY_REQUIRED angefordert haben, schaltet das System die Anzeige aus. Wenn der System-Leerlauftimer größer als der Systemtimeoutwert ist und keine Anwendungen das System durch Aufrufen von SetThreadExecutionState mit ES_SYSTEM_REQUIRED angefordert haben, wechselt das System in den Ruhezustand.
Das System verwaltet eine Anzahl von Anwendungen, die SetThreadExecutionState aufgerufen haben. Das System verfolgt jeden Thread nach, der SetThreadExecutionState aufruft, und passt den Zähler entsprechend an. Wenn dieser Indikator null erreicht und keine Benutzereingaben erfolgt sind, wechselt das System in den Ruhezustand.
Wenn die Stromversorgung niedrig ist, kann eine Anwendung einen Benutzereingriff anfordern oder anfordern, dass das System selbst angehalten wird. Sie können den Systembetrieb mit der SetSuspendState-Funktion anhalten.
Wenn das System automatisch aktiviert wird (PBT_APMRESUMEAUTOMATIC), ist keiner der Timer relevant. Weitere Informationen finden Sie unter Systemreaktivierungsereignisse.
Einsteigen in den Ruhezustand
Wenn das System in den Ruhezustand wechselt, behält es automatisch den Zustand des gesamten Systems und aller Anwendungen bei. Daher müssen die meisten Anwendungen keine besonderen Maßnahmen ergreifen. Anwendungen, die bestimmte Aktionen vor dem Systemübergang ausführen müssen, können sich für Energieereignisse registrieren.
Wenn das System ein PBT_APMSUSPEND-Ereignis sendet, hat jede Anwendung zwei Sekunden Zeit, um alle erforderlichen Aktionen auszuführen, bevor das System mit dem Übergang in den Ruhezustand beginnt. Anwendungen müssen einschränken, welche Aktionen sie als Reaktion auf dieses Ereignis ergreifen, um sicherzustellen, dass alle Vorgänge in der zugewiesenen Zeit abgeschlossen werden.
Zugehörige Themen