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

MFC教程(8)-- MFC的进程和线程

 2010-03-25 20:35:10 来源:WEB开发网   
核心提示:线程局部存储如果希望每个线程都可以有线程局部(Thread local)的静态存储数据,可以使用TLS线程局部存储技术,MFC教程(8)-- MFC的进程和线程(4),TLS为进程分配一个TLS索引,进程的每个线程通过这个索引存取自己的数据变量的拷贝,线程释放它分配的动态内存,在TLS索引不再需要时,TLS对DLL是非

线程局部存储

如果希望每个线程都可以有线程局部(Thread local)的静态存储数据,可以使用TLS线程局部存储技术。TLS为进程分配一个TLS索引,进程的每个线程通过这个索引存取自己的数据变量的拷贝。

TLS对DLL是非常有用的。当一个新的进程使用DLL时,在DLL入口函数DllMain中使用TlsAlloc分配TLS索引,TLS索引就作为进程私有的全局变量被保存;以后,当该进程的新的线程使用DLL时(Attahced to DLL),DllMain给它分配动态内存并且使用TlsSetValue把线程私有的数据按索引保存。DLL函数可以使用TlsGetValue按索引读取调用线程的私有数据。

TLS函数如下:

DWORD TlsAlloc()

在进程或DLL初始化时调用,并且把返回值(索引值)作为全局变量保存。

BOOL TlsSetValue(

DWORD dwTlsIndex, //TLS index to set value for

LPVOID lpTlsValue //value to be stored

);

其中:

dwTlsIndex是TlsAlloc分配的索引。

lpTlsValue是线程在TLS槽中存放的数据指针,指针指向线程要保存的数据。

线程首先分配动态内存并保存数据到此内存中,然后调用TlsSetValue保存内存指针到TLS槽。

LPVOID TlsGetValue(

DWORD dwTlsIndex // TLS index to retrieve value for

);

其中:

dwTlsIndex是TlsAlloc分配的索引。

当要存取保存的数据时,使用索引得到数据指针。

BOOL TlsFree(

DWORD dwTlsIndex // TLS index to free

);

其中:

dwTlsIndex是TlsAlloc分配的索引。

当每一个线程都不再使用局部存储数据时,线程释放它分配的动态内存。在TLS索引不再需要时,使用TlsFree释放索引。

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

Tags:MFC 教程 MFC

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