Sdílet prostřednictvím


Správa údajů o stavu modulů knihovny MFC

Tento článek popisuje stavová data modulů MFC a způsob aktualizace tohoto stavu při spuštění (kód cesty prochází aplikací při provádění) a opustí modul. Probereme také přepínání stavů modulů s AFX_MANAGE_STATE a METHOD_PROLOGUE makry.

Poznámka

Pojem "modul" zde odkazuje na spustitelný program nebo na knihovnu DLL (nebo sadu knihoven DLL), která funguje nezávisle na zbytku aplikace, ale používá sdílenou kopii knihovny MFC DLL. Typickým příkladem modulu je ovládací prvek technologie ActiveX.

Jak je znázorněno na následujícím obrázku, mfc obsahuje stavová data pro každý modul použitý v aplikaci. Mezi příklady těchto dat patří obslužné rutiny instancí systému Windows (používané pro načítání prostředků), ukazatele na aktuální CWinApp a CWinThread objekty aplikace, počty odkazů modulu OLE a různé mapy, které udržují propojení mezi popisovači objektů Systému Windows a odpovídajícími instancemi objektů MFC. Pokud ale aplikace používá více modulů, stavová data jednotlivých modulů nejsou široká. Každý modul má vlastní privátní kopii dat stavu MFC.

Diagram showing the state data of a single module.
Stavová data jednoho modulu (aplikace)

Stavová data modulu jsou obsažena ve struktuře a jsou vždy k dispozici prostřednictvím ukazatele na tuto strukturu. Když tok provádění zadá určitý modul, jak je znázorněno na následujícím obrázku, stav tohoto modulu musí být "aktuální" nebo "efektivní". Každý objekt vlákna má proto ukazatel na efektivní stavovou strukturu této aplikace. Udržování tohoto ukazatele neustále aktualizovaného je nezbytné ke správě globálního stavu aplikace a zachování integrity stavu jednotlivých modulů. Nesprávná správa globálního stavu může vést k nepředvídatelným chování aplikace.

State data of multiple modules.
Stavová data více modulů

Jinými slovy, každý modul zodpovídá za správné přepínání mezi stavy modulů na všech svých vstupních bodech. Vstupní bod je libovolné místo, kde tok provádění může zadat kód modulu. Vstupní body zahrnují:

Viz také

Obecná témata MFC