Multithreading s C++ a knihovnou 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.
Knihovna MFC rozlišuje dva typy vláken: Vlákna uživatelského rozhraní a pracovní vlákna. 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. Multithreading: Programovací tipy popisuje techniky, které můžete použít k vyřešení problému, které mohou nastat v těchto situacích. Multithreading: Jak použít třídy synchronizace popisuje způsob použití tříd, které jsou k dispozici pro synchronizaci přístupu z více vláken na jeden objekt.
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: