Sdílet prostřednictvím


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.

O čem chcete vědět víc?

Viz také

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