C++采用TLS線程局部存儲的用法實例
更新時間:2014年10月10日 11:55:30 投稿:shichen2014
這篇文章主要介紹了C++采用TLS線程局部存儲的用法實例,詳細講述了TLS索引及線程的操作,非常具有實用價值,需要的朋友可以參考下
本文實例講述了C++采用TLS線程局部存儲的用法。分享給大家供大家參考。
具體方法如下:
復(fù)制代碼 代碼如下:
// useTLS.cpp : 定義控制臺應(yīng)用程序的入口點。
//
#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++程序設(shè)計有所幫助。
相關(guān)文章
C++ 中使用lambda代替 unique_ptr 的Deleter的方法
這篇文章主要介紹了C++ 中使用lambda代替 unique_ptr 的Deleter的方法,需要的朋友可以參考下2017-04-04詳解C++ 編寫String 的構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值函數(shù)
這篇文章主要介紹了詳解C++ 編寫String 的構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值函數(shù)的相關(guān)資料,這里提供實例幫助大家理解掌握這部分內(nèi)容,需要的朋友可以參考下2017-08-08C語言靜態(tài)動態(tài)兩版本通訊錄實戰(zhàn)源碼
這篇文章主要為大家?guī)砹薈語言實現(xiàn)靜態(tài)動態(tài)兩版本的通訊錄實戰(zhàn)源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2022-02-02