システム スリープ条件
ユーザーまたはアプリケーションのアクティビティがあるとシステムが判断する限り、スリープ状態になりません。 システムは、ユーザー入力やネットワーク通信などの特定のアクティビティを検出できます。 ただし、システムが検出できないアクティビティは他にもあります。 たとえば、プレゼンテーション アプリケーションでは、画面を表示する必要があります。 ただし、プレゼンテーション中にアプリケーションがアイドル状態で表示され、システムがディスプレイをオフにしている可能性があります。
アプリケーションがビジー状態であることをシステムに通知するには、SetThreadExecutionState関数使用します。 この機能により、アプリケーションの実行中にシステムがスリープ状態に入ったり、ディスプレイをオフにしたりできなくなります。
プレゼンテーションアプリケーションとマルチメディアアプリケーションは、ES_DISPLAY_REQUIRED を使用して SetThreadExecutionState 関数を呼び出して、ディスプレイ デバイスをスリープ状態にしないようにする必要があります。 着信 FAX を管理するためのツールなどのイベント処理アプリケーションでは、setThreadExecutionState ES_SYSTEM_REQUIREDを呼び出してイベントを処理し、フラグをクリアして、システムがスリープ状態に戻ることができるようにする必要があります。 システムは通常、ユーザー入力によってアクティビティを決定できるため、ほとんどの生産性アプリケーション SetThreadExecutionState を使用する必要はありません。
最後のユーザー入力からの時間を維持するために、システムは表示アイドル タイマーとシステム アイドル タイマーを使用します。 システムは、アイドル タイマーを電源プランで構成された値と比較します。 表示アイドル タイマー値が表示タイムアウト値より大きく、ES_DISPLAY_REQUIREDで SetThreadExecutionState呼び出すことによって、スレッドがディスプレイを要求していない場合、システムはディスプレイの電源をオフにします。 同様に、システム アイドル タイマーがシステムタイムアウト値より大きく、ES_SYSTEM_REQUIREDで SetThreadExecutionState 呼び出してシステムを要求していない場合、システムはスリープ状態になります。
システムは、SetThreadExecutionState呼び出したアプリケーションの数を保持します。 システムは、SetThreadExecutionState 呼び出す各スレッドを追跡し、それに応じてカウンターを調整します。 このカウンターがゼロに達し、ユーザー入力がない場合、システムはスリープ状態になります。
電源が低い場合、アプリケーションはユーザーの介入を要求したり、システム自体の中断を要求したりできます。 SetSuspendState 関数を使用して、システム操作を中断できます。
システムが自動的にスリープ解除 (PBT_APMRESUMEAUTOMATIC) した場合、どのタイマーも関連しません。 詳細については、「システム ウェイクアップ イベント」を参照してください。
スリープ状態に入る
システムがスリープ状態になると、システム全体とすべてのアプリケーションの状態が自動的に保持されます。 そのため、ほとんどのアプリケーションは特別なアクションを実行する必要はありません。 システム遷移の前に特定のアクションを実行する必要があるアプリケーションは、電源イベントに登録できます。
システムが PBT_APMSUSPEND イベントを送信すると、各アプリケーションは、システムがスリープへの移行を開始する前に必要なアクションを実行するために 2 秒を持っています。 アプリケーションは、割り当てられた時間内にすべての操作を確実に完了させるために、このイベントに応答して実行するアクションを制限する必要があります。
関連トピック
-
電源管理 について