C++采用TLS线程局部存储的用法实例
本文实例讲述了C++采用TLS线程局部存储的用法。分享给大家供大家参考。
具体方法如下:
//useTLS.cpp:定义控制台应用程序的入口点。
//
#include"stdafx.h"
#include<Windows.h>
#include<process.h>
//声明
VOIDInitStartTime();
DWORDGetUserTime();
//TLS索引,作全局变量
DWORD g_dwTlsIndex;
VOIDInitStartTime()
{
DWORDdwStartTime=GetTickCount();
::TlsSetValue(g_dwTlsIndex,(LPVOID)dwStartTime);
}
DWORDGetUserTime()
{
DWORDdwNowTime=GetTickCount();
DWORDdwStartTime=(DWORD)::TlsGetValue(g_dwTlsIndex);
returndwNowTime-dwStartTime;
}
UINTWINAPIThreadProc(LPVOIDlpParameter)
{
//模拟线程的工作过程
DWORDi=1000*1000*100;
while(i--)
{
}
printf("ThreadID:%-5d,UseTime:%d\n",::GetCurrentThreadId(),GetUserTime());
return0;
}
int_tmain(intargc,_TCHAR*argv[])
{
HANDLEhThread[10];
//得到TLS索引
g_dwTlsIndex=::TlsAlloc();
//开启十个线程,计算每个线程运行的时间
for(inti=0;i<10;i++)
{
hThread[i]=(HANDLE)_beginthreadex(NULL,0,ThreadProc,NULL,0,NULL);
}
//等待工作线程
::WaitForMultipleObjects(10,hThread,TRUE,INFINITE);
for(inti=0;i<10;i++)
{
//::WaitForSingleObject(hThread[i],INFINITE);
::CloseHandle(hThread[i]);
}
//释放TLS
::TlsFree(g_dwTlsIndex);
return0;
}
希望本文所述对大家的C++程序设计有所帮助。