Multithreading: Vytváření vláken uživatelského rozhraní
Vlákno uživatelského rozhraní se běžně používá ke zpracování uživatelského vstupu a reaguje na události uživatele nezávisle na tom, zda vlákna spouští ostatní části aplikace.Hlavní aplikační vlákno (obsahuje odvozená třída CWinApp) je již vytvořeno a spuštěno za vás.Toto téma popisuje kroky, které jsou nezbytné k vytvoření dalších vláken uživatelského rozhraní.
První krok, který je nutné provést při vytváření vlákna uživatelského rozhraní, je odvození třídy z CWinThread.Je nutné deklarovat a implementovat tuto třídu pomocí makra DECLARE_DYNCREATE a IMPLEMENT_DYNCREATE.Tato třída musí přepsat některé funkce a může přepsat další.V následující tabulce jsou uvedeny tyto funkce a co by měly dělat.
Funkce pro přepsání při vytváření vlákna uživatelského rozhraní
Funkce |
Účel |
---|---|
Po ukončení vlákna provede vyčištění.Obvykle přepsána. |
|
Provede inicializaci instance vlákna.Musí být přepsána. |
|
Provádění zpracování doby nečinnosti specifické pro vlákno.Obvykle není přepsána. |
|
Filtruje zprávy dříve, než jsou odeslány do TranslateMessage a DispatchMessage.Obvykle není přepsána. |
|
Zachycuje neošetřené výjimky vyvolané zprávou vlákna a obslužnou rutinou příkazů.Obvykle není přepsána. |
|
Řídící funkce pro vlákno.Obsahuje message pump.Zřídkakdy přepsána. |
Knihovna MFC poskytuje dvě verze funkce AfxBeginThread prostřednictvím přetížení parametrů: 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í metody AfxBeginThread a poskytněte následující informace:
RUNTIME_CLASS třídy, která je odvozená z CWinThread.
(nepovinný) Požadovaná úroveň priority.Výchozí hodnota je normální priorita.Další informace o možných úrovních priority naleznete v tématu SetThreadPriority v Windows SDK.
(Volitelné) Požadovaná velikost zásobníku pro vlákno.Výchozí hodnota je stejná velikost zásobníku jako u vytvářeného vlákna.
(Volitelné) CREATE_SUSPENDED, pokud chcete, aby bylo vlákno vytvořeno v pozastaveném stavu.Výchozí hodnota je 0 nebo normální spuštění vlákna.
(Volitelné) Požadované atributy zabezpečení.Výchozí hodnota je stejný přístup jako k nadřazenému vláknu.Další informace o formátu bezpečnostních informací naleznete v tématu SECURITY_ATTRIBUTES v Windows SDK.
AfxBeginThread provede většinu práce za vás.Vytvoří nový objekt vaší třídy, inicializuje ji pomocí informací, které dodáte a volá CWinThread::CreateThread, která spustí provádění vlákna.Kontroly jsou prováděny v celém procesu, aby bylo zajištěno, že všechny objekty jsou správně uvolněny v případě, že selže některá část vytvoření.