WEB开发网
开发学院软件开发VC MFC教程(9)-- MFC的进程和线程(2) 阅读

MFC教程(9)-- MFC的进程和线程(2)

 2010-03-25 20:35:05 来源:WEB开发网   
核心提示:模块-线程状态的创建模块状态的成员模块-线程状态m_thread的创建类似于线程状态的创建:当第一次访问m_thread所对应的CThreadLocal模板对象时,给m_thread分配MFC线程局部存储的私有槽号m_nSlot,MFC教程(9)-- MFC的进程和线程(2)(2),并动态地创建_AFX_MODULE_

模块-线程状态的创建

模块状态的成员模块-线程状态m_thread的创建类似于线程状态的创建:当第一次访问m_thread所对应的CThreadLocal模板对象时,给m_thread分配MFC线程局部存储的私有槽号m_nSlot,并动态地创建_AFX_MODULE_THREAD_STATE对象,保存对象指针在m_nSlot槽中。

创建过程所涉及的几个重要函数的算法

创建过程所涉及的几个重要函数的算法描述如下:

AllocSlot

AllocSlot用来分配线程的MFC私有存储空间的槽号。由于该函数要修改全局变量_afxThreadData,所以必须使用m_sect关键段对象来同步多个线程对该函数的调用。

CThreadSlotData::AllocSlot()

{

进入关键段代码(EnterCriticalSection(m_sect);)

搜索m_pSlotData,查找空槽(SLOT)

如果不存在空槽(第一次进入时,肯定不存在)

分配或再分配内存以创建新槽,指针m_pSlotData指向分配的地址。

得到新槽(SLOT)

标志该SLOT为已用

记录最新可用的SLOT到成员变量m_nRover中。

离开关键段代码(LeaveCriticalSection(m_sect);)

返回槽号

}

GetThreadValue

GetThreadValue用来获取调用线程的第slot个线程局部变量的值。每一个线程局部变量都占用一个且只一个槽位。

CThreadSlotData::GetThreadValue(int slot)

{

//得到一个CThreadData型的指针pData

//pData指向MFC线程私有存储空间。

//m_tlsIndex在_afxThreadData创建时由构造函数创建

pData=(CThreadData*)TlsGetValue(m_tlsIndex),。

如果指针空或slot>pData->nCount, 则返回空。

否则,返回pData

}

上一页  1 2 3 4 5 6 7  下一页

Tags:MFC 教程 MFC

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接