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

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

 2010-03-25 20:35:08 来源:WEB开发网   
核心提示:CThreadSlotData的一些数据成员在CThreadSlotData类的定义中所涉及的类或者结构定义如下:(1)m_sectm_sect是一个关键段变量,在_afxThreadData创建时初始化,MFC教程(9)-- MFC的进程和线程(1)(8),因为_afxThreadData是一个全局变量,所以必须通过

CThreadSlotData的一些数据成员

在CThreadSlotData类的定义中所涉及的类或者结构定义如下:

(1)m_sect

m_sect是一个关键段变量,在_afxThreadData创建时初始化。因为_afxThreadData是一个全局变量,所以必须通过m_sect来同步多个线程对该变量的并发访问。

(2)m_nAlloc和m_pSlotData

m_nAlloc表示已经分配槽的数目,它代表了线程局部变量的个数。每一个线程局部变量都对应一个槽,每个槽对应一个线程局部变量。槽使用CSlotData类来管理。

CSlotData的定义如下:

struct CSlotData{

DWORD dwFlags; // slot flags (allocated/not allocated)

HINSTANCE hInst; // module which owns this slot

};

该结构用来描述槽的使用:

域dwFlags表示槽的状态,即被占用或者没有;

域hInst表示使用该槽的模块的句柄。

m_pSlotData表示一个CSlotData类型的数组,用来描述各个槽。该数组通过成员函数AllocSlot和FreeSlot来动态地管理,见图9-6。

(3)m_list

先讨论CThreadData 类。CThreadData定义如下:

struct CThreadData : public CNoTrackObject{

CThreadData* pNext; // required to be member of CSimpleList

int nCount; // current size of pData

LPVOID* pData; // actual thread local data (indexed by nSlot)

};

该结构用来描述CThreadSlotData为每个线程管理的线程局部空间:

域pNext把各个线程的CThreadData项目链接成一个表,即把各个线程的线程私有空间链接起来;

域nCount表示域pData的尺寸,即存储了多少个线程私有数据;

pData表示一个LPVOID类型的数组,数组中的每一个元素保存一个指针,即线程私有数据指针,该指针指向一个在堆中分配的真正存储线程私有数据的地址。数组元素的个数和槽的个数相同,每个线程局部变量(THREAD_LOCAL定义的变量)都有一个对应的槽号,用该槽号作为下标来引用pData。

m_list表示一个CThreadData类型的指针数组,数组中的各项指向各个线程的线程私有空间,每个线程在数组中都有一个对应项。该数组通过GetValue、SetValue、DeleteValues等成员函数来管理,见图9-6。

_afxThreadData

上一页  3 4 5 6 7 8 9 10 11  下一页

Tags:MFC 教程 MFC

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