zoukankan      html  css  js  c++  java
  • afxstate

    --------------------------------------------------------------------------------
    //afxtls_.h
    --------------------------------------------------------------------------------
    CThreadLocal模板类,这个类很特别,没有数据成员,需要模板参数类型的数据时,都是new出来的

    --------------------------------------------------------------------------------
    //afxstat_.h
    //afxstate.cpp
    --------------------------------------------------------------------------------
    EXTERN_THREAD_LOCAL(_AFX_THREAD_STATE, _afxThreadState)
    THREAD_LOCAL(_AFX_THREAD_STATE, _afxThreadState)

    AFX_THREAD_STATE* AfxGetThreadState();
    AFX_MODULE_STATE* AfxGetModuleState();
    AFX_MODULE_THREAD_STATE* AfxGetModalThreadState();
    Afx_MODULE_STATE* AfxGetStaticModuleState();

    AFX_THREAD_STATE包含AFX_MODULE_STATE* m_pModuleState;AFX_MODULE_STATE* m_pPrevModuleState;
    AFX_MODULE_STATE包含CThreadLocal<AFX_MODULE_THREAD_STATE> m_thread;

    --------------------------------------------------------------------------------
    // 关于AFX_MANAGER_STATE(AfxGetStaticModuleState())
    --------------------------------------------------------------------------------
    // 宏展开
    #define AFX_MANAGE_STATE_NO_INIT_MANAGED(p) AFX_MAINTAIN_STATE2 _ctlState(p);
    #define AFX_MANAGE_STATE(p) _AfxInitManaged(); AFX_MANAGE_STATE_NO_INIT_MANAGED(p)

    // AfxGetStaticModuleState函数
    class _AFX_DLL_MODULE_STATE : public AFX_MODULE_STATE
    {
    public:
        _AFX_DLL_MODULE_STATE() : AFX_MODULE_STATE(TRUE, AfxWndProcDllStatic, _MFC_VER)
            { }
    };

    static _AFX_DLL_MODULE_STATE afxModuleState;
    AFX_MODULE_STATE* AFXAPI AfxGetStaticModuleState()
    {
        AFX_MODULE_STATE* pModuleState = &afxModuleState;
        return pModuleState;
    }

    //AFX_MAINTAIN_STATE2类的构造函数
    AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(AFX_MODULE_STATE* pNewState) throw()
    {
    #ifdef _AFXDLL
        m_pThreadState = _afxThreadState.GetData();
        ASSERT(m_pThreadState);
        if(m_pThreadState)
        {
            m_pPrevModuleState = m_pThreadState->m_pModuleState;
            m_pThreadState->m_pModuleState = pNewState;
        }
        else
        {
            // This is a very bad state; we have no good way to report the error at this moment
            // since exceptions from here are not expected
            m_pPrevModuleState=NULL;
            m_pThreadState=NULL;
        }
    #endif
    }
  • 相关阅读:
    开发中的问题
    页面重定向Redirect时产生错误
    项目管理的几个阶段及分工
    让你的CSS像Jquery一样做筛选
    项目中的几个SQL程序
    SharePoint2010人员搜索配置心得
    TroubleShoot:该搜索请求无法连接到搜索服务
    转:软件架构师应该知道的97件事
    通用动态生成静态HTML页方法
    简单的正则表达式过滤网址
  • 原文地址:https://www.cnblogs.com/gakusei/p/2745179.html
Copyright © 2011-2022 走看看