Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1017193
  • 博文数量: 243
  • 博客积分: 3053
  • 博客等级: 中校
  • 技术积分: 2975
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-02 21:11
文章分类

全部博文(243)

文章存档

2013年(2)

2012年(20)

2011年(5)

2010年(114)

2009年(102)

我的朋友

分类:

2010-12-08 18:08:14

6        态对象的

(1) 态对象的

前一的三个定

CThreadSlotData* _afxThreadData;

THREAD_LOCAL(_AFX_THREAD_STATE, _afxThreadState)

PROCESS_LOCAL(_AFX_BASE_MODULE_STATE, _afxBaseModuleState)

第一个仅仅了一个指;第二和第三个定了一个模板例。相CThreadSlotData象(全局)、_AFX_THREAD_STATE象(线程局部)以及_AFX_BASE_MODULE_STATE象(程局部)并没有建。当然,模态对象的成-线象也没有被建。象要到第一次被访问时,才会被建,这样做会提高加DLL的速度。

(1) 创建线程状态

下面以一个动态链接到MFC DLL块应用程序例,象的程。

当第一次访问信息,比如使用 AfxGetModuleState得到模致系列程的始,如9-7所示。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

首先分析pState=_afxThreadState。如果_afxThreadData线程状和模态还没有建,该语句可以些数据的建。

pState声明CNoTrackObject象的指_afxThreadState声明一个模板CThreadLocal例,pState=_afxThreadData可以通过编译器的检查呢?因CThreadLocal模板重了操作符“”*”“->”两个运算返回CNoTrackObject型的象。回3.2CThreadLocalObjectCThreadLocal的定两个操作符运算到最后都是CThreadLocalObject的成函数GetData

·                                

            _afxThreadData所指象和线程状

CThreadLocalObject::GetData用来线程局部量(个例子中是线程状)的,其参数用来动态线程局部量。9-7的上面的虚线框表示其流程:

检查员变m_nSlot是否等于0线程局部量是否曾被分配了MFC线程私有空槽位),检查全局_afxTheadData是否空。如果_afxThreadData空,则创建一个CThreadSlotData类对象,_afxThreadData指向它,这样本程序的MFC线程局部存的管理者被建。如果m_nSlot等于0则让_afxThreadDtataAllocSlot分配一个槽位并把槽号保存在m_nSlot中。

得到了线程局部量(线程状)所占用的槽位后,委托_afxThreadDataGetThreadValue(m_nSlot)得到线程状态值(指)。如果果非空,返回它;如果果是NULL表明该线程状态还没有被建,于是使用参数建一个动态线程状,并使用SetValue把其指保存在槽m_nSlot中,返回

(2) 建模

得到了线后,通它得到模m_pModuleState。如果m_pModuleState空,表明该线程状是才建的,其多成员变没有赋值,程序的程模态还没有被建。于是用函数_afxBaseModule.GetData程模建。

9-7的下面一个虚线框表示了CProcessLocalObject::GetData程:

_afxBaseModule首先检查员变m_pObject是否空,如果非空就返回它,即程模;否,在堆中建一个动态_AFX_BASE_MODULE_STATE象,返回。

从上述两个GetData实现可以看出,CThreadLocal模板负责线程局部量的建和管理(查询,修改,)CProcessLocal模板负责进程局部量的建和管理(查询,修改,)

(3) -线程状

的成-线程状m_thread似于线程状建:当第一次访问m_thread对应CThreadLocal模板m_thread分配MFC线程局部存的私有槽号m_nSlot,并动态_AFX_MODULE_THREAD_STATE象,保存象指m_nSlot槽中。

 

阅读(1867) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~