MFC教程(9)-- MFC的进程和线程(1)
2010-03-25 20:35:08 来源:WEB开发网模块-线程状态的数据成员主要有:
指向当前线程对象(CWinThread对象)的指针m_pCurrentWinThread;
当前线程的框架窗口对象(CFrameWnd对象)列表m_frameList(边框窗口在创建时(见图5-8)把自身添加到m-frameList中,销毁时则删除掉,通过列表m_frameList可以遍历模块所有的边框窗口);
new操作的例外处理函数m_pfnNewHandler;
临时映射锁定标识m_nTempMapLock,防止并发修改临时映射。
系列Windows对象-MFC对象的映射,如m_pmapHWND等。
这些数据成员都是线程和模块私有的。
下一节讨论MFC如何通过上述这些类来实现其状态的管理。
线程局部存储机制和状态的实现
MFC实现线程、模块或者线程-模块私有状态的基础是MFC的线程局部存储机制。MFC定义了CThreadSlotData类型的全局变量_afxThreadData来为进程的线程分配线程局部存储空间:
CThreadSlotData* _afxThreadData;
在此基础上,MFC定义了变量_afxThreadState来管理线程状态,定义了变量_afxBaseModuleState来管理进程状态。
THREAD_LOCAL(_AFX_THREAD_STATE, _afxThreadState)
PROCESS_LOCAL(_AFX_BASE_MODULE_STATE, _afxBaseModuleState)
对于每个THREAD_LOCAL宏定义的变量,进程的每个线程都有自己独立的拷贝,这个变量在不同的线程里头可以有不同的取值。
对于每个PROCESS_LOCAL宏定义的变量,每个进程都有自己独立的拷贝,这个变量在不同的进程里头可以有不同的取值。
分别解释这三个变量。
CThreadSlotData和_afxThreadData
更多精彩
赞助商链接