Multithreading s použitím jazyka C++ a prostředí MFC

Poznámka:

Knihovna MFC (Microsoft Foundation Classes) se nadále podporuje. Už ale nepřidáme funkce ani aktualizujeme dokumentaci.

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čí, proces se také ukončí. 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 je dodávána adresa funkce main nebo WinMain.

Pokud chcete, můžete v aplikaci vytvořit další vlákna. Pokud chcete zpracovávat úlohy na pozadí nebo údržbu, aniž by uživatel musel čekat na jejich dokončení, 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 reagová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:

Viz také

Podpora multithreadingu ve starším kódu (Visual C++)