DLL:线程局部变量

1.   __declspec(thread)创建线程局部变量:__declspec(thread) int tls_count=0;

注意事项:当用__declspec(thread)声明线程局部变量的时候,应注意以下事项:

1>只能用来声明或者定义具有static作用域的变量,而不能用来声明或者定义局部变量,函数,,类型.其中具有static作用域的变量包括全局对象(包括staticextern),本地静态对象,C++类的静态数据成员.

2>线程局部变量的声明和定义必须全部指定thread属性

3>不将线程局部变量的地址视为常数

4>如果将DLL的静态作用域数据声明为__declspec(thread) ,则在显式链接时DLL会导致一个保护错误,如果DLL是用LoadLibrary加载的,请在DLL中使用TLS API类分配TLS

2.   使用API创建线程局部变量:

API创建线程局部变量的典型步骤

1>   主线程调用TlsAlloc为线程局部变量分配索引.

应该把TlsAlloc返回的索引值放到全局变量中,该索引仅对特定线程有意义

2>   为每个线程调用TlsSetValueTlsGetValue设置和读取线程局部变量

3>    主线程用TlsFree释放线程局部变量存储索引

3.   CThreadLocal模板类实现线程局部变量

1.              首先从CNoTrackObject派生一个类,该类用来包装线程局部变量

2.               他可以显式加载DLL

你可能感兴趣的:(Windows,编程)