virtuelle BOOL OnIdle ( lange lCount );
Rückgabewert
Ungleich mehr Leerlaufzeiten erhalten; 0, wenn nicht mehr im Leerlauf Zeit notwendig ist.
Parameter
lCount
Ein Zähler bei jedem OnIdle erhöht wird aufgerufen, wenn die Anwendung die Warteschlange leer ist. Dieser Zähler wird jedes Mal auf 0 zurückgesetzt, wenn eine neue Nachricht bearbeitet wird. Sie können den lCount -Parameter verwenden, um die relative Länge der Zeit bestimmen, die die Anwendung im Leerlauf befunden hat, ohne die Verarbeitung einer Nachricht.
Bemerkungen
Überschreiben Sie diese Memberfunktion um Leerlauf Zeit Verarbeitung durchzuführen. OnIdle wird in der Standard-Nachrichtenschleife aufgerufen, wenn die Anwendung die Warteschlange leer ist. Verwenden Sie die Überschreibung, um Ihre eigenen Hintergrund im Leerlauf-Handler Aufgaben aufrufen.
OnIdle sollte zurückgeben 0, um anzugeben, dass keine Leerlaufzeiten erforderlich ist. Der Parameter lCount wird jedes Mal erhöht OnIdle wird aufgerufen, wenn die Messagenbsp; Queue ist leer und wird jedes Mal, wenn eine neue &Nachricht verarbeitet wird auf 0 zurückgesetzt. Ihre verschiedenen im Leerlauf Routinen basierend auf diese Zahl können Sie.
Im folgenden wird zusammengefasst Leerlaufschleife Verarbeitung:
OnIdle für das Application-Objekt und liefert 0 als Argument lCount.OnIdleführt einige Verarbeitung und gibt ein Wert ungleich NULL an, es sollte wieder aufgerufen werden, um zu tun, Weiterverarbeitung.OnIdle wieder erhöht das lCount -Argument.OnIdle beendet die Verarbeitung aller Leerlaufaufgaben und gibt 0 zurück. Dies sagt die &Nachrichtenschleife aufhören, OnIdle bis die nächste Nachricht aus der Warteschlange für Nachrichten, empfangen ist an welcher Stelle im Leerlauf Zyklus mit dem Argument startet Tonbsp set; 0.Führen Sie keine langwierige Aufgaben während OnIdle , weil Ihre Anwendung Benutzereingaben nicht verarbeiten kann, bis OnIdle zurückgibt.
Hinweis&Nbsp; Die Standardimplementierung der OnIdle aktualisiert Befehl Benutzeroberflächen Objekte wie z. B. Menüelemente und Symbolleisten-Schaltflächen, und es führt interne Daten Struktur Cleanup. Daher, wenn Sie OnIdleüberschreiben, müssen Sie CWinApp::OnIdle mit der lCount in Ihrer überschriebene Version aufrufen. Rufen Sie zuerst alle Basisklasse Leerlaufverarbeitung (d. h. bis die Basisklasse OnIdle 0 zurückgibt). Wenn Sie benötigen, um Aufgaben auszuführen, bevor die Basisklasse-Verarbeitung abgeschlossen ist, überprüfen Sie die Basisklasse Implementierung, wählen die richtige lCount , um Ihre Arbeit zu erledigen.
Beispiel
Die folgenden zwei Beispiele zeigen, wie OnIdleverwenden. Das erste Beispiel verarbeitet zwei Leerlaufaufgaben mit dem lCount -Argument, um die Aufgaben zu priorisieren. Die erste Aufgabe hat hohe Priorität, und Sie sollten ausführen es, wann immer möglich. Die zweite Aufgabe ist weniger wichtig und sollte gemacht werden, nur wenn es eine lange Pause in Benutzereingaben gibt. Beachten Sie den Aufruf der Basisklasse Version von BEILEERLAUF. Das zweite Beispiel verwaltet eine Gruppe von Leerlaufaufgaben mit unterschiedlichen Prioritäten.
BOOL CMyApp::OnIdle(LO&NG lCount)
{
Nbsp; BOOL bMore = CWinApp::OnIdle(lCount);
Wenn (lCount == 0)
{
TRACE ("App für Time\n kurzen Zeitraum im Leerlauf");
bMore = TRUE;
}
else If (lCount == 10)
{
TRACE ("App für Time\n längere Zeitspanne im Leerlauf");
bMore = TRUE;
}
else If (lCount == 100)
{
TRACE ("App für Time\n noch längere Zeitspanne im Leerlauf");
bMore = TRUE;
}
else If (lCount == 1000)
{
TRACE ("App im Leerlauf für ziemlich lange Zeit Time\n");
/ / bMore nicht auf TRUE festgelegt ist, müssen Sie nicht mehr im Leerlauf
/ / WICHTIG: bMore ist nicht auf FALSE festgelegt, da möglicherweise CWinApp::OnIdle
/ / Weitere Leerlauf Aufgaben abgeschlossen haben.
}
bMore zurück;
/ / Gibt TRUE zurück, solange es keine Aufgaben mehr im Leerlauf
}
Zweites Beispiel
// 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 Übersicht |nbsp; Member der Klasse | Hierarchiediagramm