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

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

 2010-03-25 20:35:08 来源:WEB开发网   
核心提示:CThreadSlotData的定义以Win32线程局部存储机制为基础,MFC设计了类CThreadSlotData来提供管理线程局部存储的功能,MFC教程(9)-- MFC的进程和线程(1)(7),MFC应用程序使用该类的对象──全局变量_afxThreadData来管理本进程的线程局部存储,CThreadSlotD

CThreadSlotData的定义

以Win32线程局部存储机制为基础,MFC设计了类CThreadSlotData来提供管理线程局部存储的功能,MFC应用程序使用该类的对象──全局变量_afxThreadData来管理本进程的线程局部存储。CThreadSlotData类的定义如下:

class CThreadSlotData

{

public:

CThreadSlotData();

//Operations

int AllocSlot();

void FreeSlot(int nSlot);

void* GetValue(int nSlot);

void SetValue(int nSlot, void* pValue);

// delete all values in process/thread

void DeleteValues(HINSTANCE hInst, BOOL bAll = FALSE);

// assign instance handle to just constructed slots

void AssignInstance(HINSTANCE hInst);

// Implementation

DWORD m_tlsIndex;// used to access system thread-local storage

int m_nAlloc; // number of slots allocated (in UINTs)

int m_nRover; // (optimization) for quick finding of free slots

int m_nMax; // size of slot table below (in bits)

CSlotData* m_pSlotData; // state of each slot (allocated or not)

//list of CThreadData structures

CTypedSimpleList<CThreadData*> m_list;

CRITICAL_SECTION m_sect;

// special version for threads only!

void* GetThreadValue(int nSlot);

void* PASCAL operator new(size_t, void* p){ return p; }

void DeleteValues(CThreadData* pData, HINSTANCE hInst);

~CThreadSlotData();

};

通过TLS索引m_tlsIndex,CThreadSlotData对象(_afxThreadData)为每一个线程分配一个线程私有的存储空间并管理该空间。它把这个空间划分为若干个槽,每个槽放一个线程私有的数据指针,这样每个线程就可以存放任意个线程私有的数据指针。

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

Tags:MFC 教程 MFC

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