1CWinThread* AFXAPI AfxGetThread() 2{ 3 // check for current thread in module thread state 4 AFX_MODULE_THREAD_STATE* pState = AfxGetModuleThreadState(); 5 CWinThread* pThread = pState->m_pCurrentWinThread; 6 return pThread; 7} 8 9AFX_MODULE_THREAD_STATE* AFXAPI AfxGetModuleThreadState() 10{ 11 AFX_MODULE_THREAD_STATE* pResult=AfxGetModuleState()->m_thread.GetData(); 12 ENSURE(pResult != NULL); 13 return pResult; 14} 15 16AFX_MODULE_STATE* AFXAPI AfxGetModuleState() 17{ 18 _AFX_THREAD_STATE* pState = _afxThreadState; 19 ENSURE(pState); 20 AFX_MODULE_STATE* pResult; 21 if (pState->m_pModuleState != NULL) 22 { 23 // thread state's module state serves as override 24 pResult = pState->m_pModuleState; 25 } 26 else 27 { 28 // otherwise, use global app state 29 pResult = _afxBaseModuleState.GetData(); 30 } 31 ENSURE(pResult != NULL); 32 return pResult; 33} 34 35AFX_INLINE TYPE* GetData() 36 { 37 TYPE* pData = (TYPE*)CProcessLocalObject::GetData(&CreateObject); 38 ENSURE(pData != NULL); 39 return pData; 40 } 41 42CNoTrackObject* CProcessLocalObject::GetData(CNoTrackObject* (AFXAPI* pfnCreateObject)()) 43{ 44 if (m_pObject == NULL) 45 { 46 AfxLockGlobals(CRIT_PROCESSLOCAL); 47 TRY 48 { 49 if (m_pObject == NULL) 50 m_pObject = (*pfnCreateObject)(); 51 } 52 CATCH_ALL(e) 53 { 54 AfxUnlockGlobals(CRIT_PROCESSLOCAL); 55 THROW_LAST(); 56 } 57 END_CATCH_ALL 58 AfxUnlockGlobals(CRIT_PROCESSLOCAL); 59 } 60 return m_pObject; 61}
CWinThread 部分代码
Stella981
2021-10-11
935 0 0
点赞
收藏
评论区
加载中...