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