C++采用TLS线程局部存储的用法实例
C++采用TLS线程局部存储的用法实例
发布时间:2016-12-28 来源:查字典编辑
摘要:本文实例讲述了C++采用TLS线程局部存储的用法。分享给大家供大家参考。具体方法如下:复制代码代码如下://useTLS.cpp:定义控制台...

本文实例讲述了C++采用TLS线程局部存储的用法。分享给大家供大家参考。

具体方法如下:

复制代码 代码如下:// useTLS.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include <Windows.h>

#include <process.h>

//声明

VOID InitStartTime();

DWORD GetUserTime();

//TLS索引,作全局变量

DWORD g_dwTlsIndex;

VOID InitStartTime()

{

DWORD dwStartTime = GetTickCount();

::TlsSetValue(g_dwTlsIndex,(LPVOID)dwStartTime);

}

DWORD GetUserTime()

{

DWORD dwNowTime = GetTickCount();

DWORD dwStartTime = (DWORD)::TlsGetValue(g_dwTlsIndex);

return dwNowTime - dwStartTime;

}

UINT WINAPI ThreadProc(LPVOID lpParameter)

{

//模拟线程的工作过程

DWORD i = 1000 * 1000 *100;

while (i--)

{

}

printf("Thread ID:%-5d,Use Time:%dn",::GetCurrentThreadId(), GetUserTime());

return 0;

}

int _tmain(int argc, _TCHAR* argv[])

{

HANDLE hThread[10];

//得到TLS索引

g_dwTlsIndex = ::TlsAlloc();

//开启十个线程,计算每个线程运行的时间

for (int i=0;i<10;i++)

{

hThread[i] = (HANDLE)_beginthreadex(NULL, 0, ThreadProc, NULL, 0, NULL);

}

//等待工作线程

::WaitForMultipleObjects(10, hThread, TRUE, INFINITE);

for (int i=0;i<10;i++)

{

//::WaitForSingleObject(hThread[i], INFINITE);

::CloseHandle(hThread[i]);

}

//释放TLS

::TlsFree(g_dwTlsIndex);

return 0;

}

希望本文所述对大家的C++程序设计有所帮助。

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C语言学习
热门C语言学习
编程开发子分类