首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

COM 里面不支持TLS(Thread Local Storage) 吗?该怎么处理

2012-02-11 
COM 里面不支持TLS(Thread Local Storage) 吗?我在COM里面写了下面的代码出错了:__declspec(thread)static

COM 里面不支持TLS(Thread Local Storage) 吗?
我在COM里面写了下面的代码出错了:
__declspec(thread)   static   int   num   =   321;

void   test()
{
int   i   =   num;   //   got   an   error   "   Access   violation   reading   location   0x00000000. "
num   =   332211;
Sleep(5000);
i   =   num;
}
然而这个代码在普通的dll中可以运行。

如果com不支持的话,我想问下在com有个static的全局变量,如果想在com里面实现多线程,而且每个线程都能单独维护自己的这个static的全局变量,如何做到?
谢谢!

[解决办法]
你的客户端也是VC的程序吗?

这种静态的TLS定义有些危险 "__declspec(thread) "。就是LoadLibrary有可能不初始化__tls_index,这样你就出现0x000000了(因为你的__tls_index没有初始化)。 COM 其实就是个LoadLibrary,我估计很可能没有叫LdrInitializeTls。(不敢100%肯定,我得查一下)。但是静态使用在Kernel初始化的时候100%会叫这个。

你随便写个程序,直接LoadLibrary=》Test,看有没有类似问题。 还是尽量少用TLS了,如果一定要用还是动态分配安全些。

热点排行