Multithreading: Vytváření vláken uživatelského rozhraní MFC
Vlákno uživatelského rozhraní se běžně používá ke zpracování uživatelského vstupu a odpovídání na uživatelské události nezávisle na vláknech, která spouští další části aplikace. Hlavní vlákno aplikace (zadané ve vaší CWinApp
-odvozené třídě) je již vytvořeno a spuštěno za vás. Toto téma popisuje kroky potřebné k vytvoření dalších vláken uživatelského rozhraní.
První věc, kterou musíte udělat při vytváření vlákna uživatelského rozhraní, je odvozena třída z CWinThread. Musíte deklarovat a implementovat tuto třídu pomocí DECLARE_DYNCREATE a IMPLEMENT_DYNCREATE maker. Tato třída musí přepsat některé funkce a může přepsat jiné. Tyto funkce a jejich akce by měly být uvedeny v následující tabulce.
Funkce, které se mají přepsat při vytváření vlákna uživatelského rozhraní
Function | Účel |
---|---|
ExitInstance | Vyčištění proveďte při ukončení vlákna. Obvykle se přepsaly. |
InitInstance | Proveďte inicializaci instance vlákna. Musí se přepsat. |
OnIdle | Proveďte zpracování doby nečinnosti specifické pro vlákno. Obvykle není přepsáno. |
PreTranslateMessage | Filtrování zpráv před jejich odesláním do TranslateMessage a DispatchMessage . Obvykle není přepsáno. |
ProcessWndProcException | Zachycení neošetřených výjimek vyvolaných zprávou vlákna a obslužnými rutinami příkazů Obvykle není přepsáno. |
Běžet | Řídicí funkce pro vlákno. Obsahuje čerpadlo zpráv. Zřídka přepsaný. |
Knihovna MFC poskytuje dvě verze funkce AfxBeginThread
prostřednictvím přetížení parametru: jednu, která může pouze vytvořit pracovní vlákna, a jednu, která může vytvářet vlákna uživatelského rozhraní nebo pracovní vlákna. Chcete-li spustit vlákno uživatelského rozhraní, zavolejte druhé přetížení AfxBeginThread, které poskytuje následující informace:
RUNTIME_CLASS třídy, kterou jste odvozli z
CWinThread
.(Volitelné) Požadovaná úroveň priority. Výchozí hodnota je normální priorita. Další informace o dostupných úrovních priority naleznete v tématu SetThreadPriority v sadě Windows SDK.
(Volitelné) Požadovaná velikost zásobníku pro vlákno. Výchozí hodnota je stejná velikost zásobníku jako při vytváření vlákna.
(Volitelné) CREATE_SUSPENDED, pokud chcete, aby se vlákno vytvořilo v pozastaveném stavu. Výchozí hodnota je 0 nebo normálně spusťte vlákno.
(Volitelné) Požadované atributy zabezpečení. Výchozí hodnota je stejný přístup jako nadřazené vlákno. Další informace o formátu těchto informací o zabezpečení najdete v tématu SECURITY_ATTRIBUTES v sadě Windows SDK.
AfxBeginThread
dělá většinu práce za vás. Vytvoří nový objekt vaší třídy, inicializuje ho informacemi, které zadáte, a zavolá CWinThread::CreateThread , aby se spustilo vlákno. Kontroly jsou provedeny v průběhu postupu, aby se zajistilo, že všechny objekty jsou správně uvolněny, pokud všechny části vytváření selžou.