// Dynamic-TLS.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <windows.h>
#include <iostream>
using namespace std;
DWORD WINAPI ThreadProcedure(LPVOID ParameterData);
DWORD __TlsIndex[3] = {0};
char __Name[5][20] = { {"关羽"},{"赵云"},{"张飞"},{"马超"},{"黄忠"} };
int main()
{
// 动态分配TLS Slot
int i = 0;
for (i=0;i<3;i++)
{
__TlsIndex[i] = TlsAlloc();
}
DWORD ThreadID[3] = { 0 };
HANDLE ThreadHandle[3] = { 0 };
for (i=0;i<5;i++)
{
ThreadHandle[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProcedure,
(LPVOID)__Name[i], 0, &ThreadID[i]);
}
Sleep(1000);
memset(__Name, 0, sizeof(__Name));
WaitForMultipleObjects(5,ThreadHandle,TRUE,INFINITE);
printf("Input AnyKey To Exit\r\n");
getchar();
return 0;
}
DWORD WINAPI ThreadProcedure(LPVOID ParameterData)
{
int i = 0;
for (i=0;i<2;i++)
{
char* Name = new char[20];
if (i==0)
{
memcpy(Name, (char*)ParameterData, strlen((char*)ParameterData) + 1);
TlsSetValue(__TlsIndex[0], Name);
}
else if (i==1)
{
memcpy(Name, "Hello", strlen("Hello") + 1);
TlsSetValue(__TlsIndex[1], Name);
}
}
for (i=0;i<10;i++)
{
Sleep(1);
printf("%s %s\r\n",(char*)TlsGetValue(__TlsIndex[0]),(char*)TlsGetValue(__TlsIndex[1]));
}
free(TlsGetValue(__TlsIndex[0]));
free(TlsGetValue(__TlsIndex[1]));
return 0;
}