Multithreading s použitím jazyka C++ a prostředí 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 kliknete na ikonu 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 dodána adresa funkce main nebo WinMain.
Pokud chcete, můžete vytvořit další vlákna ve vaší aplikaci.Můžete provádět zpracování úkolů na pozadí nebo úkoly údržby, pokud nechcete, aby uživatel musel čekat na jejich dokončení.Všechna vlákna v aplikacích 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 vlákna pracovních vláken.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émů, které mohou nastat v těchto situacích.Multithreading: Jak použít synchronizační třídy 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 více vlákny ve Visual C++ ukazují několik vícevláknových funkcí přidání a rozhraní Win32 API, která nejsou zahrnuta knihovnou MFC; slouží však pouze jako výchozí 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: