C++采用TLS線程局部存儲的用法實例
更新時間:2014年10月10日 11:55:30 投稿:shichen2014
這篇文章主要介紹了C++采用TLS線程局部存儲的用法實例,詳細講述了TLS索引及線程的操作,非常具有實用價值,需要的朋友可以參考下
本文實例講述了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:%d\n",::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;
}
//
#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:%d\n",::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++程序設計有所幫助。
相關文章
基于Matlab實現(xiàn)離散系統(tǒng)分岔圖的繪制
這篇文章主要介紹了如何利用Matlab實現(xiàn)離散分岔圖的繪制,文中的示例代碼講解詳細,對我們學習Matlab有一定的幫助,需要的可以參考一下2022-04-04

