知識マップ: スリープ・休止・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で起床させるのが定石となる。
flowchart LR
accTitle: スリープとModern Standbyの知識マップ
accDescr: S3スリープ・休止・Modern StandbyそれぞれでアプリがDAMによりどう止まるか、SetThreadExecutionStateや電源要求による抑止、SystemEvents.PowerModeChangedによる復帰対応、WakeToRunによる起床実行の関係を示す図
modern_standby["Modern Standby対応デバイス"]
dam["DAM(Desktop Activity Moderator)"]
s3_sleep["S3スリープ(従来のスリープ)"]
tcp_idle_timeout_drop["中間機器のアイドルタイムアウトによるTCP接続破棄"]
setthreadexecutionstate["SetThreadExecutionState"]
powercfg_requests["powercfg /requests"]
power_request_api["電源要求API(PowerCreateRequest等)"]
systemevents_powermodechanged["SystemEvents.PowerModeChanged"]
windows_service["Windowsサービス"]
wm_powerbroadcast["WM_POWERBROADCAST"]
powerregistersuspendresumenotification["PowerRegisterSuspendResumeNotification"]
waketorun["WakeToRun(タスクスケジューラの起床実行)"]
allow_wake_timer_setting["電源オプションの「スリープ解除タイマーの許可」"]
task_scheduler["タスクスケジューラの無人実行"]
wakeable_timer["ウェイク可能タイマー(SetWaitableTimerのfResume)"]
powercfg_a["powercfg /a"]
hibernate_s4["休止状態(S4)"]
modern_standby -->|"両立しない"| s3_sleep
modern_standby -->|"利用する"| dam
dam -.->|"原因になり得る"| tcp_idle_timeout_drop
s3_sleep -.->|"原因になり得る"| tcp_idle_timeout_drop
setthreadexecutionstate -.->|"防止する"| s3_sleep
setthreadexecutionstate -->|"で確認できる"| powercfg_requests
power_request_api -->|"で確認できる"| powercfg_requests
power_request_api -.->|"両立しない"| modern_standby
systemevents_powermodechanged -.->|"両立しない"| windows_service
systemevents_powermodechanged -->|"利用する"| wm_powerbroadcast
powerregistersuspendresumenotification -->|"推奨される対応"| windows_service
systemevents_powermodechanged -->|"推奨される対応"| tcp_idle_timeout_drop
waketorun -->|"前提とする"| allow_wake_timer_setting
waketorun -->|"利用する"| task_scheduler
wakeable_timer -.->|"前提とする"| setthreadexecutionstate
modern_standby -->|"で確認できる"| powercfg_a
s3_sleep -->|"で確認できる"| powercfg_a
hibernate_s4 -->|"で確認できる"| powercfg_a
waketorun -.->|"前提とする"| s3_sleep
概念間の関係(全19件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- Modern Standby対応デバイスはS3スリープ(従来のスリープ)と両立しません。
- Modern Standby対応デバイスはDAM(Desktop Activity Moderator)を利用します。
- DAM(Desktop Activity Moderator)は中間機器のアイドルタイムアウトによるTCP接続破棄の原因になることがあります。
- S3スリープ(従来のスリープ)は中間機器のアイドルタイムアウトによるTCP接続破棄の原因になることがあります。
- SetThreadExecutionStateはS3スリープ(従来のスリープ)を防ぎます。
- SetThreadExecutionStateはpowercfg /requestsで確認できます。
- 電源要求API(PowerCreateRequest等)はpowercfg /requestsで確認できます。
- 電源要求API(PowerCreateRequest等)はModern Standby対応デバイスと両立しません。
- SystemEvents.PowerModeChangedはWindowsサービスと両立しません。
- SystemEvents.PowerModeChangedはWM_POWERBROADCASTを利用します。
- PowerRegisterSuspendResumeNotificationはWindowsサービスに対する本記事の推奨です。
- SystemEvents.PowerModeChangedは中間機器のアイドルタイムアウトによるTCP接続破棄に対する本記事の推奨です。
- WakeToRun(タスクスケジューラの起床実行)は電源オプションの「スリープ解除タイマーの許可」を前提とします。
- WakeToRun(タスクスケジューラの起床実行)はタスクスケジューラの無人実行を利用します。
- ウェイク可能タイマー(SetWaitableTimerのfResume)はSetThreadExecutionStateを前提とします。
- Modern Standby対応デバイスはpowercfg /aで確認できます。
- S3スリープ(従来のスリープ)はpowercfg /aで確認できます。
- 休止状態(S4)はpowercfg /aで確認できます。
- WakeToRun(タスクスケジューラの起床実行)はS3スリープ(従来のスリープ)を前提とします。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。