Sdílet prostřednictvím


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

ExitInstance

Po ukončení vlákna provede vyčištění.Obvykle přepsána.

InitInstance

Provede inicializaci instance vlákna.Musí být přepsána.

OnIdle

Provádění zpracování doby nečinnosti specifické pro vlákno.Obvykle není přepsána.

PreTranslateMessage

Filtruje zprávy dříve, než jsou odeslány do TranslateMessage a DispatchMessage.Obvykle není přepsána.

ProcessWndProcException

Zachycuje neošetřené výjimky vyvolané zprávou vlákna a obslužnou rutinou příkazů.Obvykle není přepsána.

Spustit

Ří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í.

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

Viz také

Koncepty

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