Freigeben über


Leerlaufschleifen-Verarbeitung

Viele Anwendungen werden die langwierige Verarbeitung "im Hintergrund aus." Manchmal schreiben Überlegungen zur Leistung für solche mit Multithreading arbeiten vor.Threads sind die zusätzlichen mehraufwand, daher werden sie nicht für einfache Aufgaben wie die Leerlauf Arbeit empfohlen, dass MFC in der OnIdle-Funktion übernimmt.Dieser Artikel konzentriert sich auf Leerlaufverarbeitung.Weitere Informationen über Multithreading finden Sie Multithreading-Themen.

Einige Arten die Hintergrundverarbeitung sind während der Intervalle geeignet, dass der Benutzer nicht anderweitig in der Anwendung interagiert.In einer Anwendung, die für das Microsoft Windows-Betriebssystem entwickelt wurde, kann eine Anwendung den Leerlauf ausführen, indem sie einen längeren Prozess in vielen kleinen Fragmenten verarbeitet wird.Nach dem jedes Fragment verarbeitet hat, führt die Anwendung Windows Execution Control PeekMessage mithilfe einer Schleife.

In diesem Artikel werden zwei Möglichkeiten, Leerlaufverarbeitung in der Anwendung durchzuführen:

  • Verwenden PeekMessage in Haupter Meldungsschleife MFC.

  • Eine andere PeekMessage Schleife an anderer Stelle in der Anwendung einbetten.

PeekMessage in der MFC-Nachrichtenschleife

In einer Anwendung, die mit MFC entwickelt wurde, enthält die primäre Meldungsschleife in der CWinThread-Klasse eine Meldungsschleife, die die PeekMessage Win32-API aufruft.Diese Schleife ruft außerdem die OnIdle-Memberfunktion von Nachrichten zwischen CWinThread an.Eine Anwendung kann Nachrichten in dieser Leerlaufzeit verarbeiten, indem sie die OnIdle-Funktion überschreibt.

HinweisHinweis

Ausführen, OnIdle und bestimmte andere Memberfunktionen sind nun CWinThread-Member der Klasse statt der Klasse CWinApp.CWinApp ist von CWinThread abgeleitet.

Weitere Informationen über das Ausführen der Leerlaufverarbeitung finden Sie unter OnIdle in der MFC-Referenz.

PeekMessage an anderer Stelle in der Anwendung

Eine andere Möglichkeit zum Ausführen der Leerlaufverarbeitung in einer Anwendung umfasst das Einbetten einer Nachrichtenschleife in eine der Funktionen.Diese Nachrichtenschleife ähnelt Haupter Meldungsschleife MFC in CWinThread::Run sehr ähnlich.Das bedeutet, dass eine solche Schleife in einer Anwendung, die mit MFC entwickelt wurde, viele der Aufgaben wie die primäre Meldungsschleife ausgeführt werden muss.Im folgenden Codefragment wird das Schreiben einer Nachrichtenschleife, die mit MFC kompatibel ist:

BOOL bDoingBackgroundProcessing = TRUE;
while (bDoingBackgroundProcessing) 
{ 
   MSG msg;
   while (::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) 
   { 
      if (!AfxGetApp()->PumpMessage()) 
      { 
         bDoingBackgroundProcessing = FALSE; 
         ::PostQuitMessage(0); 
         break; 
      } 
   } 
   // let MFC do its idle processing
   LONG lIdle = 0;
   while (AfxGetApp()->OnIdle(lIdle++ ))
      ;  
   // Perform some background processing here 
   // using another call to OnIdle
}

Dieser Code, eingebettet in einer Funktion wird, solange die Leerlaufverarbeitung gibt.Innerhalb dieser Schleife ruft eine geschachtelte Schleife wiederholt PeekMessage an.Solange dies Rückkehraufrufe einen Wert ungleich 0 (null), die Schleife CWinThread::PumpMessage aufruft, um normale Meldung übersetzung und - c$weiterleiten auszuführen.Obwohl PumpMessage nicht dokumentiert ist, können Sie den Quellcode in der ThrdCore.Cpp-Datei im Verzeichnis \ atlmfc \ \ Kraftstoffregler src unter dem Verzeichnis der Visual C++-Installation überprüfen.

Sobald die innere Schleife beendet die äußere Schleife ausgeführte Leerlaufverarbeitung mit einem oder mehreren Aufrufen OnIdle.Mit dem ersten Aufruf wird zu Zwecken MFC.Sie können weitere Aufrufe Ihre eigene Arbeit erledigen lassen OnIdle Hintergrund.

Weitere Informationen über das Ausführen der Leerlaufverarbeitung finden Sie unter OnIdle in der MFC-Bibliotheksreferenz.

Siehe auch

Konzepte

Allgemeine MFC-Themen