Zarządzanie danymi stanu modułów MFC

W tym artykule omówiono dane stanu modułów MFC oraz sposób aktualizowania tego stanu podczas przepływu wykonywania (kod ścieżki przechodzi przez aplikację podczas wykonywania) i opuszcza moduł. Omówiono również przełączanie stanów modułów przy użyciu makr AFX_MANAGE_STATE i METHOD_PROLOGUE.

Uwaga

Termin "module" w tym miejscu odnosi się do programu wykonywalnego lub biblioteki DLL (lub zestawu bibliotek DLL), które działają niezależnie od pozostałej części aplikacji, ale używa udostępnionej kopii biblioteki DLL MFC. Kontrolka ActiveX jest typowym przykładem modułu.

Jak pokazano na poniższej ilustracji, MFC zawiera dane stanu dla każdego modułu używanego w aplikacji. Przykłady tych danych obejmują dojścia wystąpień systemu Windows (używane do ładowania zasobów), wskaźniki do bieżących CWinApp i CWinThread obiektów aplikacji, liczby odwołań do modułów OLE oraz różne mapy, które utrzymują połączenia między uchwytami obiektów systemu Windows i odpowiednimi wystąpieniami obiektów MFC. Jednak gdy aplikacja używa wielu modułów, dane stanu każdego modułu nie są szerokie. Zamiast tego każdy moduł ma własną prywatną kopię danych stanu MFC.

Diagram showing the state data of a single module.
Dane stanu pojedynczego modułu (aplikacja)

Dane stanu modułu są zawarte w strukturze i są zawsze dostępne za pośrednictwem wskaźnika do tej struktury. Gdy przepływ wykonywania przechodzi do określonego modułu, jak pokazano na poniższej ilustracji, stan tego modułu musi być stanem "current" lub "effective". W związku z tym każdy obiekt wątku ma wskaźnik do efektywnej struktury stanu tej aplikacji. Aktualizowanie tego wskaźnika przez cały czas jest niezbędne do zarządzania stanem globalnym aplikacji i utrzymaniem integralności stanu każdego modułu. Nieprawidłowe zarządzanie stanem globalnym może prowadzić do nieprzewidywalnego zachowania aplikacji.

State data of multiple modules.
Dane stanu wielu modułów

Innymi słowy, każdy moduł jest odpowiedzialny za poprawne przełączanie między stanami modułu we wszystkich punktach wejścia. "Punkt wejścia" to dowolne miejsce, w którym przepływ wykonywania może wprowadzić kod modułu. Punkty wejścia obejmują:

Zobacz też

Tematy ogólne dotyczące MFC