MFC占用系统TLS的一个槽口,将它扩展成很多个。
从程序启动说起。
上面的代码定义了一个全局变量_afxInitAppState,该全局变量初始化时调用函数AfxInitialize(),也就是它初始化了MFC的线程局部存储。
AfxInitialize函数调用AfxGetModuleState()函数。
_afxThreadState是一个全局变量,类型为CThreadLocal<_AFX_THREAD_STATE>,赋值为_AFX_THREAD_STATE*类型,调用CThreadLocal的成员函数如下:
接下来调用父类中的CThreadLocalObject::GetData()函数,它的一个参数是一个函数指针,用于创建指定_AFX_THREAD_STATE对象。
详细代码如下: