Multithreading: Vytváření podprocesů 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í
Function |
Úč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 obsahuje dvě verze AfxBeginThread pomocí parametru přetížení: jeden, který lze vytvořit pouze v pracovních podprocesů a jeden, který může vytváření vláken uživatelského rozhraní nebo pracovních podprocesů.Chcete-li spustit vlákno uživatelského rozhraní, zavolejte druhý přetížení AfxBeginThread, poskytuje 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.
(nepovinný) 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.
(nepovinný) 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.
(nepovinný) Požadované atributy zabezpečení.Výchozí hodnota je stejný přístup jako nadřazené vlákno.Další informace o formátu informací zabezpečení 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ě zrušeny, takže by neměla selhat žádná část tvorby.