本文共 1643 字,大约阅读时间需要 5 分钟。
);
示例代码说明:两个线程向同一个索引中设置不同值,然后再从同一个索引中可以取出自己设置的值,说明TLS索引对每个线程做了不同的备份
// ThreadTls.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "stdlib.h"#include "windows.h"CHAR * g_pszText = NULL;DWORD g_nTlsIndex = 0;void Print( ){ printf( "g_pszText: %s\n", g_pszText ); //从TLS索引中获取值 CHAR * pszText = (CHAR *) TlsGetValue( g_nTlsIndex ); printf( "TLS: %s\n", pszText );}DWORD WINAPI PrintProc( LPVOID pParam ){ CHAR * pszText = (CHAR *)pParam; g_pszText = (CHAR *)malloc( 100 ); strcpy( g_pszText, pszText ); //将值保存到TLS索引当中 TlsSetValue( g_nTlsIndex, g_pszText ); while( 1 ) { Print( ); Sleep( 1000 ); } return 0;}void Create( ){ HANDLE hThread = NULL; DWORD nThreadID = 0; CHAR szText1[] = "ThreadProc 1----------"; hThread = CreateThread( NULL, 0, PrintProc, szText1, 0, &nThreadID ); CHAR szText2[] = "-----ThreadProc 2-----"; hThread = CreateThread( NULL, 0, PrintProc, szText2, 0, &nThreadID ); WaitForSingleObject( hThread, INFINITE );}int main(int argc, char* argv[]){ //创建TLS索引号 g_nTlsIndex = TlsAlloc( ); //创建线程 Create( ); //释放索引 TlsFree( g_nTlsIndex ); return 0;}
转载地址:http://twxui.baihongyu.com/