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释放索引。
实现线程的消息循环
在MFC中,消息循环是由线程完成的。一般地,可以使用MFC缺省的消息循环(即使用函数CWindThrad::Run),但是,有些时候需要程序员自己实现一个线程的消息循环,比如在用户界面线程进行一个长时间计算处理或者等待另一个线程时。一般有如下形式:
while ( bDoingBackgroundProcessing)
{
MSG msg;
while ( ::PeekMessage( &msg, NULL,0, 0, PM_NOREMOVE ) )
{
if ( !PumpMessage( ) )
{
bDoingBackgroundProcessing = FALSE;
::PostQuitMessage( );
break;
}
}
// let MFC do its idle processing
LONG lIdle = 0;
while ( AfxGetApp()->OnIdle(lIdle++ ) );
// Perform some background processing here
// using another call to OnIdle
}
该段代码的解释参见图5-3对线程的Run函数的图解。