3

GetLastInputInfo メソッドについては知っていますが、最後のユーザー入力 (キーボードまたはマウス) からの期間しかわかりません。ユーザー入力が最後に受信されたのが 10 分前であったとしても、システムが 10 分間アイドル状態だったことを意味するわけではありません (スキャン、ダウンロード、映画など、さまざまな理由があります)。

では、システムが本当にアイドル状態であるかどうかをどのように識別できるのでしょうか?

Windowの「アイドル」の定義を知っている人はいますか? しきい値の組み合わせである必要があります-5%未満のCPU使用率、3%未満のディスク使用率など-ユーザー入力パラメーター...誰かが正確な定義を知っていますか?

4

2 に答える 2

2

「アイドル」の正確な定義はありません。それはあなたが望むものです。

于 2009-11-09T17:55:46.173 に答える
2

ほとんどの Windows アプリは UI 主導型であり、Windows UI はメッセージ キューからメッセージをフェッチすることによって駆動されるため、アプリケーションがいつ「アイドル」であるかを定義する一般的な方法の 1 つは、メッセージ キューにメッセージがないときです。

Windows アプリ (ユーザー生成およびシステム生成) では常にメッセージが飛び交っていますが、一般的なアプリでは短いアイドル期間が頻繁に見られます。マウスがアプリのウィンドウ上を移動すると、マウス アクティビティによって大量のメッセージ アクティビティが生成されるため、マウスの動きが止まるまで、アイドル期間はほぼゼロになります。

そのため、Windows アプリのメッセージ ループで、現在 GetMessage を使用している場合は、代わりに PeekMessage を使用するようにループを変更する必要があります。メッセージが到着するまで、メッセージ キューが空の場合、GetMessage はブロックします。PeekMessage は、キューにメッセージがある場合は true を返し、メッセージがない場合は false を返します。フラグを使用すると、同じ呼び出しで PeekMessage にメッセージを取得させることができます。

PeekMessage が false を返した場合、次のメッセージを待つ代わりに、「アイドル」タスクに実行をそらすことができます。

WinForms アプリケーションでは、Application.Idle イベントを使用します。

ただし、アイドル状態のコードでやりすぎないようにしてください。そうしないと、メッセージがすばやく処理されないため、UI が遅く感じられます。アイドル サイクルを使いすぎると、CPU が過熱し、ラップトップのバッテリーが消耗します。

于 2010-06-08T23:38:32.813 に答える