CWinApp::OnIdle

仮想 BOOL OnIdle ( 長い lCount );

戻り値

0 以外の値によりアイドル状態の処理時間を受信する;アイドル時間が必要な場合 0。

パラメーター

lCount

OnIdleたびにカウンターは、アプリケーションのメッセージ キューが空の場合に呼び出されます。このカウントは、新しいメッセージが処理されるたびに 0 にリセットされます。LCountパラメーターを使用して、アプリケーションは、メッセージを処理せずアイドル状態が時間の相対的な長さを決定することができます。

解説

アイドル時の処理を実行するにはこのメンバー関数をオーバーライドします。アプリケーションのメッセージ キューが空の場合、既定のメッセージ ループでOnIdleが呼び出されます。オーバーライドを使用して独自の背景アイドル ハンドラー タスクを呼び出すこと。

OnIdleは、アイドル状態の処理時間が必要ないことを示すために 0 を返す必要があります。パラメーター lCountたびにインクリメントされますOnIdleときと呼ばれる messagenbsp;キューは空で、新しいメッセージが処理されるたびを 0 にリセットします。この数に基づいて、別のアイドル ルーチンを呼び出すことができます。(&N)。

次のアイドル ループ処理を要約します。:

  1. Microsoft Foundation クラス ライブラリ内のメッセージ ループがメッセージ キューをチェックし、ない保留中のメッセージを検索する場合は、それを呼び出す OnIdle のアプリケーション オブジェクトと供給 0 lCount引数として。

  2. OnIdleいくつかの処理を実行し、それを示す 0 以外の値は、呼び出す必要があります再度するを返す処理。

  3. メッセージ ループは、メッセージ キューを再度チェックします。保留中のメッセージがない場合は、それを呼び出す OnIdle 再び、 lCount引数をインクリメント。

  4. 最終的には、 OnIdle すべてのアイドル タスクの処理が終了して 0 を返します。これは、呼び出しを停止するには、メッセージ ループを示します OnIdle 、次のメッセージがメッセージ キューから受信されるまで、アイドル状態のサイクルを再起動、引数には、ポイントで tonbsp を設定; 0(&N)。

Onidle 関数から戻るまで、アプリケーションはユーザー入力を処理することはできませんので時間のかかるタスク中にOnIdleを実行しないでください。

特価;Onidle 関数の既定の実装がメニュー項目とツール バー ボタンなどのコマンド ユーザー インターフェイス オブジェクトを更新し、内部データ構造の後処理を行います。したがって、 OnIdleをオーバーライドする場合は、 lCountCWinApp::OnIdleあなたのオーバーライドされたバージョンで呼び出す必要があります。最初にすべての基本クラスのアイドル処理を呼び出します (つまり、基本クラスのOnIdle 0 を返すまで)。基本クラスの処理が完了する前に作業を実行する必要がある場合は、あなたの仕事を行うために適切なlCountを選択するには、基本クラスの実装を確認します。(&N)。

次の 2 つの例は、 onidle 関数を使用する方法を示します。最初の例は、 lCount引数を使用して、タスクの優先順位を 2 つアイドル タスクを処理します。最初のタスクは優先度高とあなたは可能な限り行う必要があります。2 番目のタスクが重要ですし、長い間入力が場合にのみ行う必要があります。基本クラス バージョンOnIdleの呼び出しに注意してください。2 番目の例のアイドル タスク別の優先順位とグループを管理します。

BOOL CMyApp::OnIdle(LONG lCount){特価;BOOL bMore = CWinApp::OnIdle(lCount);場合 (lCount = = 0){トレース (「アプリケーション \n の短い期間アイドル」);bMore = TRUE;}他の場合 (lCount 10 = =){トレース (「アプリケーション \n 時間が長くアイドル」);bMore = TRUE;}他の場合 (lCount = 100){トレース (「アプリケーション \n も長く量のアイドル」);bMore = TRUE;}他の場合 (lCount 1000 = =){トレース (「アプリケーション \n をかなり長い期間のアイドル」);・ ・ bMore が TRUE に設定されていない、もはやアイドルが必要//重要: bMore 設定されていない FALSE に CWinApp::OnIdle ことがありますので//より多くのアイドル タスクを実行します。}bMore を返す;//よりアイドル タスクがある場合に限り TRUE を返す}(&N)

2 番目の例

// In this example, four idle loop tasks are given various 
// opportunities to run:
// Task1 is always given a chance to run during idle time, provided
//   that no message has queued up while the framework was processing
//   its own idle loop tasks (at lCount levels 0 and 1).
// Task2 is given a chance to run only if Task1 has already run,
//   provided that no message has queued up while Task1 was running.
// Task3 and Task4 are given a chance to run only if both Task1 and
//   Task2 have already run, and no message has queued up in the mean
//   time.  If Task3 gets its chance to run, then Task4 always gets
//   a chance to run immediately after Task3.

BOOL CMyApp::OnIdle(LONG lCount)
{
   // In this example, as in most applications, you should let the
   // base class CWinApp::OnIdle complete its processing before you
   // attempt any additional idle loop processing.
   if (CWinApp::OnIdle(lCount))
      return TRUE;   

   // The base class CWinApp::OnIdle reserves the lCount values 0 
   // and 1 for the framework's own idle processing.   If you wish to
   // share idle processing time at a peer level with the framework,
   // then replace the above if-statement with a straight call to
   // CWinApp::OnIdle; and then add a case statement for lCount value
   // 0 and/or 1. Study the base class implementation first to 
   // understand how your idle loop tasks will compete with the 
   // framework's idle loop processing.

   switch (lCount)
   {
      case 2:
         Task1();
         return TRUE; // next time give Task2 a chance
      case 3:
         Task2();
         return TRUE; // next time give Task3 and Task4 a chance
      case 4:
         Task3();
         Task4();
         return FALSE; // cycle through the idle loop tasks again
   }
   return FALSE;
}


CWinApp の概要|nbsp;クラス メンバー |階層図(&N)

Index