Multithreading s použitím jazyka C++ a prostředí MFC
Knihovna MFC (Microsoft Foundation Class) poskytuje podporu pro vícevláknové aplikace. Toto téma popisuje procesy a vlákna a přístup MFC k multithreadingu.
Proces je spuštěná instance aplikace. Když například poklikáte na ikonu Poznámkového bloku, spustíte proces, na kterém běží Poznámkový blok.
Vlákno je cesta provádění v rámci procesu. Když spustíte Poznámkový blok, operační systém vytvoří proces a začne spouštět primární vlákno tohoto procesu. Když se toto vlákno ukončí, provede to proces. Toto primární vlákno je do operačního systému dodáno spouštěcím kódem ve formě adresy funkce. Obvykle se jedná o adresu main
zadané WinMain
funkce.
Pokud chcete, můžete v aplikaci vytvořit další vlákna. Pokud nechcete, aby uživatel čekal na dokončení úlohy na pozadí nebo údržbu, můžete to udělat. Všechna vlákna v aplikacích MFC jsou reprezentována objekty CWinThread . Ve většině situací nemusíte ani explicitně vytvářet tyto objekty; místo toho volejte pomocnou funkci architektury AfxBeginThread, která vytvoří CWinThread
objekt za vás.
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í uživatelského vstupu a odpovídání na události a zprávy generované uživatelem. Pracovní vlákna se běžně používají k dokončení úloh, jako je přepočet, které nevyžadují uživatelský vstup. Rozhraní API Win32 nerozlišuje mezi typy vláken; Potřebuje jenom znát počáteční adresu vlákna, aby mohl začít spouštět vlákno. MFC zpracovává vlákna uživatelského rozhraní speciálně tak, že dodává pumpu zpráv pro události v uživatelském rozhraní. CWinApp
je příkladem objektu vlákna uživatelského rozhraní, protože je odvozen od CWinThread
událostí a zpráv generovaných uživatelem a zpracovává je.
Zvláštní pozornost je třeba věnovat situacím, kdy více než jedno vlákno může vyžadovat přístup ke stejnému objektu. Multithreading: Programovací tipy popisují techniky, které můžete použít k řešení problémů, které mohou vzniknout v těchto situacích. Multithreading: Použití synchronizačních tříd popisuje, jak používat třídy , které jsou k dispozici pro synchronizaci přístupu z více vláken do jednoho objektu.
Psaní a ladění vícevláknového programování je ze své podstaty složitý a komplikovaný podnik, protože je nutné zajistit, aby objekty nebyly současně přístupné více vlákny. Témata s více vlákny nenaučují základy vícevláknového programování, pouze jak používat mfc ve vícevláknovém programu. Vícevláknové ukázky MFC zahrnuté v jazyce Visual C++ znázorňují několik vícevláknových rozhraní API pro přidávání funkcí a rozhraní WIN32, která nejsou zahrnuta v prostředí MFC; jsou však určeny pouze jako výchozí bod.
Další informace o tom, jak operační systém zpracovává procesy a vlákna, naleznete v tématu Procesy a vlákna v sadě Windows SDK.
Další informace o podpoře multithreadingu MFC najdete v následujících tématech: