ほとんどの Windows アプリは UI 主導型であり、Windows UI はメッセージ キューからメッセージをフェッチすることによって駆動されるため、アプリケーションがいつ「アイドル」であるかを定義する一般的な方法の 1 つは、メッセージ キューにメッセージがないときです。
Windows アプリ (ユーザー生成およびシステム生成) では常にメッセージが飛び交っていますが、一般的なアプリでは短いアイドル期間が頻繁に見られます。マウスがアプリのウィンドウ上を移動すると、マウス アクティビティによって大量のメッセージ アクティビティが生成されるため、マウスの動きが止まるまで、アイドル期間はほぼゼロになります。
そのため、Windows アプリのメッセージ ループで、現在 GetMessage を使用している場合は、代わりに PeekMessage を使用するようにループを変更する必要があります。メッセージが到着するまで、メッセージ キューが空の場合、GetMessage はブロックします。PeekMessage は、キューにメッセージがある場合は true を返し、メッセージがない場合は false を返します。フラグを使用すると、同じ呼び出しで PeekMessage にメッセージを取得させることができます。
PeekMessage が false を返した場合、次のメッセージを待つ代わりに、「アイドル」タスクに実行をそらすことができます。
WinForms アプリケーションでは、Application.Idle イベントを使用します。
ただし、アイドル状態のコードでやりすぎないようにしてください。そうしないと、メッセージがすばやく処理されないため、UI が遅く感じられます。アイドル サイクルを使いすぎると、CPU が過熱し、ラップトップのバッテリーが消耗します。