Sdílet prostřednictvím


Zpracování nečinné smyčka

Mnoho aplikací provádět zdlouhavé zpracování "v"pozadí. Informace o výkonu někdy diktovat pomocí multithreading těchto prací.Podprocesy zahrnují další rozvoj režie tak není vhodné pro jednoduché úkoly jako práce doba nečinnosti, která MFC nemá v OnIdle funkce.Tento článek se zaměřuje na zpracování nečinné.Další informace o multithreading, viz Multithreading témata.

Některé druhy zpracování na pozadí vhodně v intervalech, které uživatel není jinak interakci s aplikací.Aplikace vyvinuté pro operační systém Microsoft Windows, aplikace rozdělením zdlouhavý proces do mnoha malých fragmentů provést zpracování doba nečinnosti.Po zpracování každého fragmentu dává aplikaci spuštění ovládacího prvku pomocí systému Windows PeekMessage smyčky.

Tento článek popisuje dva způsoby zpracování v aplikaci nečinnosti:

  • Pomocí PeekMessage ve smyčce MFC jeho hlavní zpráva.

  • Vložení jiného PeekMessage jinde v aplikaci opakovat.

PeekMessage zpráva smyčku MFC

Aplikace vyvinuté pomocí MFC, hlavní zpráva opakovat v CWinThread třída obsahuje smyčka zpráv, který volá PeekMessage rozhraní API systému Win32.Opakovat také volání OnIdle členské funkce CWinThread mezi zprávami.Aplikace může zpracovávat zprávy v této době nečinnosti přepsáním OnIdle funkce.

[!POZNÁMKA]

Spustit, OnIdle, a některé další funkce členů jsou nyní členy třídy CWinThread namísto třídy CWinApp.CWinAppje odvozen z CWinThread.

Další informace o zpracování provést nečinnosti naleznete OnIdle v MFC odkaz.

Jinde v aplikaci PeekMessage

Jiný způsob provedení nečinnosti zpracování aplikace zahrnuje v jednom funkce vkládání smyčka zpráv.Tato smyčka zpráv je velmi podobná MFC jeho hlavní zpráva vedení, v CWinThread::Run.To znamená, že smyčku aplikace vyvinuté pomocí MFC musí provést mnoho funkcí, hlavní zpráva smyčky.Následující fragment kódu ukazuje smyčka zpráv, který je kompatibilní s MFC psaní:

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
}

Tento kód vložený do funkce, cyklicky, jako je zpracování nečinné provést.V rámci této smyčky vnořené smyčky opakovaně volá PeekMessage.Volání vrátí nenulovou hodnotu, jako volání smyčky CWinThread::PumpMessage provádět překlad běžných zpráv a odesílání.Přestože PumpMessage je, můžete zkontrolovat jeho zdrojový kód v souboru ThrdCore.Cpp v adresáři \atlmfc\src\mfc instalaci aplikace Visual C++.

Jednou vnitřní cyklus skončí Vnější smyčka provádí nečinnosti zpracování jednoho nebo více volání s OnIdle.První volání je pro účely jeho MFC.Můžete provést další volání na OnIdle práci pozadí.

Další informace o zpracování provést nečinnosti naleznete OnIdle v referenční knihovny MFC.

Viz také

Koncepty

Obecná témata MFC