Systemschlafkriterien
Solange das System feststellt, dass benutzer- oder Anwendungsaktivitäten vorhanden sind, wird er nicht in den Ruhezustand eingeschlafen. 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 die Anwendung während der Präsentation im Leerlauf ist, wodurch das System die Anzeige deaktiviert.
Um das System zu benachrichtigen, dass die Anwendung ausgelastet ist, verwenden Sie die SetThreadExecutionState--Funktion. Diese Funktion verhindert, dass das System in den Ruhezustand wechselt oder die Anzeige deaktiviert, 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 sollte. Ereignisbehandlungsanwendungen, z. B. Tools zum Verwalten eingehender Faxe, müssen SetThreadExecutionState- mit ES_SYSTEM_REQUIREDaufrufen, das Ereignis behandeln und dann das Kennzeichen löschen, damit das System in den Ruhezustand zurückkehren kann. Beachten Sie, dass die meisten Produktivitätsanwendungen SetThreadExecutionState- nicht verwenden müssen, da das System in der Regel aktivitäten nach Benutzereingaben bestimmen kann.
Um die Zeit seit der letzten Benutzereingabe beizubehalten, verwendet das System einen Anzeigetimer und einen System-Leerlauftimer. Das System vergleicht die Leerlaufzeitgeber mit den im Energieplan konfigurierten Werten. Wenn der Zeitgeberwert der Anzeige im Leerlauf größer als der Anzeigetimeoutwert ist und keine Threads die Anzeige angefordert haben, indem SetThreadExecutionState mit ES_DISPLAY_REQUIREDaufgerufen wird, wird die Anzeige vom System ausgeschaltet. Wenn der Leerlaufzeitgeber des Systems größer als der Systemtimeoutwert ist und keine Anwendungen das System angefordert haben, indem SetThreadExecutionState mit ES_SYSTEM_REQUIREDaufgerufen wird, wechselt das System in den Ruhezustand.
Das System verwaltet eine Anzahl von Anwendungen, die SetThreadExecutionStateaufgerufen haben. Das System verfolgt jeden Thread, der SetThreadExecutionState- aufruft, und passt den Zähler entsprechend an. Wenn dieser Zähler null erreicht und keine Benutzereingabe vorhanden ist, wechselt das System in den Ruhezustand.
Wenn der Strom niedrig ist, kann eine Anwendung ein Eingreifen des Benutzers anfordern oder anfordern, dass das System sich selbst angehalten hat. Sie können den Systemvorgang mithilfe der funktion SetSuspendState anhalten.
Wenn das System automatisch aktiviert wird (PBT_APMRESUMEAUTOMATIC), sind keine der Timer relevant. Weitere Informationen finden Sie unter System wake-up Events.
Betreten des Ruhezustands
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 ausführen müssen, bevor die Systemübergänge sich für Energieereignisse registrieren können.
Wenn das System ein PBT_APMSUSPEND-Ereignis sendet, hat jede Anwendung zwei Sekunden Zeit, um alle erforderlichen Aktionen auszuführen, bevor das System den Übergang in den Ruhezustand startet. Anwendungen müssen einschränken, welche Maßnahmen sie als Reaktion auf dieses Ereignis ergreifen, um sicherzustellen, dass alle Vorgänge in der zugewiesenen Zeit abgeschlossen werden.
Verwandte Themen