Sdílet prostřednictvím


Multithreading s C++ a MFC

Knihovna Microsoft Foundation Class (knihovna MFC) poskytuje podporu pro víceprocesové aplikace.Toto téma popisuje procesy a vlákna a knihovnu MFC pro přístup k multithreadingu.

Proces je vykonávající instance aplikace.Například když dvakrát poklepete na ikona programu Poznámkový blok, spustí se proces, který spustí program Poznámkový blok.

Vlákno je cesta provádění v rámci procesu.Když spustíte program Poznámkový blok, operační systém vytvoří proces a začne vykonávat primární vlákno tohoto procesu.Když je toto vlákno ukončeno, ukončí se i proces.Toto primární vlákno je dodáno operačnímu systému spouštěcím kódem ve tvaru adresy funkce.Obvykle je to adresa funkce main nebo WinMain, která je dodána.

Pokud chcete, můžete vytvořit další vlákna ve vaší aplikaci.Můžete provádět zpracování úkolů na pozadí nebo údržby, pokud nechcete, aby uživatel nemusel čekat na jejich dokončení.Všechny vlákna v aplikacích knihovny MFC jsou představovány objekty CWinThread.Ve většině případů nemusíte ani explicitně vytvářet tyto objekty; místo toho zavolejte pomocnou funkci architektury AfxBeginThread, která pro Vás vytvoří objekt CWinThread.

MFC rozlišuje dva typy vláken: podprocesy uživatelské rozhraní a pracovních podprocesů.Vlákna uživatelského rozhraní se běžně používají ke zpracování vstupu uživatele a reagují na události a zprávy vytvořené uživatelem.Pracovní vlákna se běžně používají k dokončení úkolů, jako je například přepočet, který nepotřebuje vstup uživatele.Rozhraní API Win32 nerozlišuje mezi typy vláken; potřebuje pouze znát počáteční adresu vlákna a pak může toto vlákno spustit.Knihovna MFC zpracovává vlákna uživatelského rozhraní speciálně poskytnutím zprávy odeslané pro události v uživatelském rozhraní.CWinApp je příkladem objektu vlákna uživatelského rozhraní, protože je odvozen z CWinThread a zpracovává události a zprávy generované uživatelem.

Zvláštní pozornost by měla být věnována situacím, kdy více než jedno vlákno může vyžadovat přístup ke stejnému objektu.Při souběžném: Tipy programování popisuje techniky, které lze vyřešit problémy, které mohou vzniknout v těchto situacích.Při souběžném: Způsob použití třídy synchronizace popisuje použití tříd, které jsou k dispozici pro synchronizaci přístupu více podprocesů jednoho objektu.

Psaní a ladění programování s více vlákny je ve své podstatě složitým a záludným úkolem, protože musíte zajistit, aby byly objekty přístupné současně pouze jednomu vláknu.Témata multithreadingu neučí základy programování s více vlákny, ale pouze ukazují, jak použít třídy MFC ve Vašem vícevláknovém programu.Ukázky knihovny MFC s vice vlákny ve Visual C++ ukazují několik více vláknových přidaných funkcí a rozhraní Win32 API nejsou zahrnuta podle knihovny MFC; nicméně ty jsou určeny pouze pro počáteční bod.

Další informace o způsobu, jakým operační systém zpracovává procesy a vlákna naleznete v tématu Procesy a vlákna v Windows SDK.

Další informace o podpoře multithreadingu knihovnou MFC naleznete v následujících tématech:

Viz také

Koncepty

Multithreading podpora pro starší kód (Visual C++)