知識マップ: スリープ・休止・Modern Standbyと長時間稼働アプリ ── 「夜中に止まっていた」を設計で防ぐ

記事「スリープ・休止・Modern Standbyと長時間稼働アプリ ── 「夜中に止まっていた」を設計で防ぐ」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

Windowsのスリープには従来のS3スリープ・休止状態(S4)・Modern Standby(S0 low power idle)があり、Modern Standby機でもデスクトップアプリはDAM(Desktop Activity Moderator)にスレッドをサスペンドされ、見かけ上動いていてもアプリは止まる。スリープ中にアイドル化したTCP接続は中間機器のタイムアウトで黙って破棄され、復帰後は再接続が前提になる。抑止はSetThreadExecutionStateや電源要求APIで宣言し、powercfg /requestsで確認できるが、ユーザー操作によるスリープやバッテリー駆動のModern Standbyでの打ち切りは防げない。スリープ前提の設計ではPowerModeChangedやPowerRegisterSuspendResumeNotificationで復帰を検知して再接続・再スケジュールし、定時処理はWakeToRunで起床させるのが定石となる。

スリープとModern Standbyの知識マップS3スリープ・休止・Modern StandbyそれぞれでアプリがDAMによりどう止まるか、SetThreadExecutionStateや電源要求による抑止、SystemEvents.PowerModeChangedによる復帰対応、WakeToRunによる起床実行の関係を示す図両立しない利用する原因になり得る原因になり得る防止するで確認できるで確認できる両立しない両立しない利用する推奨される対応推奨される対応前提とする利用する前提とするで確認できるで確認できるで確認できる前提とするModern Standby対応デバイスDAM(Desktop Activity Moderator)S3スリープ(従来のスリープ)中間機器のアイドルタイムアウトによるTCP接続破棄SetThreadExecutionStatepowercfg /requests電源要求API(PowerCreateRequest等)SystemEvents.PowerModeChangedWindowsサービスWM_POWERBROADCASTPowerRegisterSuspendResumeNotificationWakeToRun(タスクスケジューラの起床実行)電源オプションの「スリープ解除タイマーの許可」タスクスケジューラの無人実行ウェイク可能タイマー(SetWaitableTimerのfResume)powercfg /a休止状態(S4)

概念間の関係(全19件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

Modern Standby対応デバイス
画面オフ中も低電力でネットワーク接続を維持できる高速スリープモデルに対応したデバイス。選択できるPower planがBalanced系に制限される。
DAM(Desktop Activity Moderator)
Modern Standby中にデスクトップアプリの実行をS3スリープ同等に抑え込み、対話セッションのプロセスを全スレッドサスペンドさせるWindowsの仕組み。
S3スリープ(従来のスリープ)
CPUを停止しRAMだけ通電して状態を保持する、計算処理が一切走らないシステムスリープ状態。
SetThreadExecutionState
呼び出したスレッドの実行状態を宣言し、無操作タイムアウト起因の自動スリープや画面オフを抑止できるWin32 API。
電源要求API(PowerCreateRequest等)
理由文字列付きでスリープや画面オフの抑止要求を作成・設定・解除できる、SetThreadExecutionStateより新しいWindows 7以降のAPI群。
SystemEvents.PowerModeChanged
サスペンド・レジューム時に発生する.NETのイベントで、メッセージポンプが動作していないと発生しない。
PowerRegisterSuspendResumeNotification
ウィンドウハンドルを持たないプロセスでも、サスペンド・復帰の通知をコールバックとして受け取れるWin32 API。
WakeToRun(タスクスケジューラの起床実行)
実行時刻にスリープ・休止からコンピューターを起床させ、タスク完了までシステムを起きたままにするタスクスケジューラの設定。
ウェイク可能タイマー(SetWaitableTimerのfResume)
指定時刻にシステム自体を起床させられる、SetWaitableTimerのfResumeパラメーターをTRUEにしたタイマー。
休止状態(S4)
メモリの内容を休止ファイルへ書き出してから電源を切る、計算処理が一切走らないシステムスリープ状態。

機械可読データ

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。