CWinApp::OnIdle

wirtualne BOOL OnIdle ( LONG lCount );

Wartość zwracany

Różna od zera do otrzymania bardziej bezczynności czas przetwarzania; 0, jeśli potrzeba więcej czasu bezczynności.

Parametry

lCount

Licznik zwiększaną OnIdle nazywa się gdy kolejka komunikatów aplikacji jest pusty. Ten licznik jest resetowany do 0 każdym razem, gdy nowa wiadomość jest przetwarzany. Można użyć parametru lCount do określenia względnej długości czasu, których stosowanie jest bezczynny, bez przetwarzania wiadomości.

Uwagi

Zastąpić tę funkcję Państwa do przetwarzania czas bezczynności. OnIdle nazywa się w pętli wiadomości domyślnie gdy kolejka komunikatów aplikacji jest pusty. Wywołanie własne tło obsługi bezczynnego zadania za pomocą sieci zastępowania.

Przy_bezczy&nności powinien zwracać wartość 0 wskazuje, że nie bezczynności przetwarzania jest wymagany. Parametr lCount jest zwiększany o jeden przy każdym OnIdle nosi nazwę po messagenbsp; kolejka jest puste i zerowana każdym razem, gdy nowa wiadomość jest przetwarzany. Można wywołać z różnych procedur bezczynności, w oparciu o ten licznik.

Poniżej zestawiono przetwarzania pętlę bezczynności:

  1. Jeśli pętli komunikatów w bibliotece Microsoft Foundation klasy sprawdza, kolejki komunikatów i nie znajdzie oczekujące wiadomości, wywołuje OnIdle dla obiektu application i dostaw 0 jako lCount argument.

  2. OnIdlewykonuje część przetwarzania i zwraca wartość różną od zera do wskazania go powinna zostać wywołana ponownie do dalszego przetwarzania.

  3. Pętla wiadomości ponownie sprawdza kolejki wiadomości. Jeśli nie wiadomości oczekujące, wywołuje OnIdle ponownie, zwiększając lCount argument.

  4. Ostatecz&nie OnIdle kończy przetwarzanie wszystkich bezczynnych zadań i zwraca wartość 0. To programowi pętli komunikatów zaprzestanie wywoływania OnIdle aż do następnej wiadomości została pobrana z kolejki wiadomości, w którym bezczynne cyklu uruchamia się ponownie z argumentem ustawić tonbsp; 0.

Nie wykonać długich zadania podczas OnIdle , ponieważ aplikacja nie może przetworzyć danych wejściowych użytkownika, dopóki OnIdle zwraca.

Uwaganbsp;  Domyślna implementacja OnIdle aktualizacji obiektów interfejsu użytkownika poleceń takich jak elementy menu i przyciski paska narzędzi i wykonuje oczyszczania struktury danych wewnętrznych. W związku z tym jeśli można zastąpić OnIdle, należy wywołać CWinApp::OnIdle z lCount w wersji przesłonięte. &Najpierw wywołaj wszystkie klasa bazowa bezczynności przetwarzania (dopóki klasy bazowej OnIdle zwraca 0). Jeśli trzeba wykonać pracę przed zakończeniem przetwarzania klasa bazowa, przeglądu wdrożenia klasa bazowa wybierz właściwego lCount , podczas którego pracę.

Przykład

Następujące dwa przykłady zawierają używania OnIdle. Pierwszy przykład przetwarza dwóch bezczynnych zadań przy użyciu argumentu lCount na określanie priorytetów zadań. Pierwszym zadaniem jest wysoki priorytet, i należy je zawsze, gdy jest to możliwe. Drugim zadaniem jest mniej ważna i powinna być wykonywana tylko po długiej przerwie w danych wejściowych użytkownika. Uwaga wezwania do wersji klasa bazowa OnIdle. Drugi przykład zarządza grupa bezczynnego zadania o różnych priorytetach.

BOOL CMyApp::OnIdle(LO&NG lCount)
{
 nbsp;  BOOL bMore = CWinApp::OnIdle(lCount);

Jeżeli (lCount == 0)
    {
    ŚLEDŹ ("aplikacja bezczynne przez krótki okres time\n");
    bMore = TRUE;
    }
    else if (lCount == 10)
    {
    ŚLEDŹ ("aplikacja bezczynny dłuższą time\n");
        bMore = TRUE;
    }
    else if (lCount == 100)
    {
        ŚLEDŹ ("aplikacja bezczynny nawet dłuższą time\n");
        bMore = TRUE;
    }
    else if (lCount == 1000)
    {
        ŚLEDŹ ("aplikacja bezczynne przez dość długi okres time\n");
     / / bMore nie jest ustawiona na wartość TRUE, nie jest już potrzebna, bezczynności
     / / Ważne: bMore nie jest ustawiona na wartość FALSE, ponieważ może CWinApp::OnIdle
     / / mają więcej bezczynnych zadań do wykonania.
    }

Zwraca bMore;
     / / zwróci TRUE, tak długo, jak ma żadnych więcej bezczynnego zadania
}

Drugi przykład

// 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;
}


Omówienie CWinApp |nbsp; Klasa członków | Wykres hierarchii

Index