Gerenciando os dados do estado dos módulos MFC
Este artigo discute os dados do estado dos módulos MFC e como esse estado é atualizado quando o fluxo de execução (código de caminho demora por meio de um aplicativo durante a execução) entra e sai de um módulo.Alternando estados de módulo com o AFX_MANAGE_STATE e METHOD_PROLOGUE macros também é abordada.
Observação |
---|
O termo "módulo" aqui refere-se um programa executável ou uma DLL (ou conjunto de DLLs) que operam independentemente do restante do aplicativo, mas usa uma cópia compartilhada da DLL da MFC.Um controle ActiveX é um exemplo típico de um módulo. |
Como mostrado na figura a seguir, o MFC tem dados de estado para cada módulo usado em um aplicativo.Exemplos de dados identificadores de instância do Windows (usados para carregar recursos), ponteiros para o atual CWinApp e CWinThread objetos de um aplicativo, contagens de referência de módulo OLE e uma variedade de mapas que mantêm as conexões entre identificadores de objeto do Windows e correspondentes instâncias de objetos do MFC.No entanto, quando um aplicativo usa vários módulos, os dados do estado de cada módulo não não aplicativos grande.Em vez disso, cada módulo possui sua própria cópia dos dados do estado do MFC.
Dados de estado de um único módulo (aplicativo)
Dados de estado do módulo estão contidos em uma estrutura e estão sempre disponíveis por meio de um ponteiro para essa estrutura.Quando o fluxo de execução insere um módulo específico, como mostrado na figura a seguir, o estado do módulo deve ser o estado "atual" ou "efetivo".Portanto, cada objeto thread tem um ponteiro para a estrutura de estado efetivo desse aplicativo.Mantendo este ponteiro atualizado em todos os tempos é vital para o estado global do aplicativo de gerenciamento e manutenção da integridade do estado de cada módulo.Gerenciamento incorreto do estado global pode causar comportamento imprevisível do aplicativo.
Dados de estado de vários módulos
Em outras palavras, cada módulo é responsável por corretamente alternando entre estados de módulo em todos os seus pontos de entrada.Um "ponto de entrada" é qualquer lugar onde o fluxo de execução pode inserir o código do módulo.Pontos de entrada incluem: