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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值