Sdílet prostřednictvím


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

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

Co chcete vědět více?

Viz také

Koncepty

Multithreading s C++ a MFC