초기 스 레 드, TlsSetValue

C/C++ code

     
     
     
     
// Test.cpp : 。 // #include " stdafx.h " using namespace std; // TLS DWORD g_tlsUsedTime; void InitStartTime(); DWORD GetUsedTime(); UINT __stdcall ThreadFunc(LPVOID) { int i; // InitStartTime(); // i = 10000 * 10000 ; while (i -- ) { } // printf( " This thread is coming to end. Thread ID: %-5d, Used Time: %d /n " , ::GetCurrentThreadId(), GetUsedTime()); return 0 ; } int _tmain( int argc, _TCHAR * argv[]) { UINT uId; int i; HANDLE h[ 10 ]; // g_tlsUsedTime = ::TlsAlloc(); // for (i = 0 ; i < 10 ; i ++ ) { h[i] = (HANDLE)::_beginthreadex(NULL, 0 , ThreadFunc, NULL, 0 , & uId); } for (i = 0 ; i < 10 ; i ++ ) { ::WaitForSingleObject(h[i], INFINITE); ::CloseHandle(h[i]); } // ::TlsFree(g_tlsUsedTime); return 0 ; } // void InitStartTime() { // DWORD dwStart = ::GetTickCount(); ::TlsSetValue(g_tlsUsedTime, (LPVOID)dwStart); } // DWORD GetUsedTime() { // DWORD dwElapsed = ::GetTickCount(); dwElapsed = dwElapsed - (DWORD)::TlsGetValue(g_tlsUsedTime); return dwElapsed; }

InitStartTime 함수 에서: TlsSetValue (g tlsUsedTime, (LPVOID) dwStart);,tls Used Time 은 다 똑 같 아 요. 이해 가 안 돼 요. 이게 어떤 과정 인지.
This function allocates a thread local storage (TLS) index. 
Any thread of the process can subsequently use this index to store and retrieve values that are local to the thread. 
DWORD TlsAlloc(void); 
각 스 레 드 가 실 행 된 후 시간 을 빼 는 시간 을 얻 는 것 이다.
C/C++ code

     
     
     
     
g_tlsUsedTime = ::TlsAlloc(); dwElapsed = dwElapsed - (DWORD)::TlsGetValue(g_tlsUsedTime);

TLS 는 스 레 드 로 컬 저장 이라는 뜻 으로 같은 색인 이 다른 스 레 드 는 서로 다른 값 을 저장 할 수 있 습 니 다.
::TlsSetValue(g_tlsUsedTime, (LPVOID)dwStart) ;
g_tles Used Time 은 TLS 색인 일 뿐 main 함수 에서 신청 한 것 입 니 다.
모두 g 이지 만tlesUsedTime, 서로 다른 스 레 드 에서 TlsSetValue 를 호출 하 는 것 은 값 을 다른 곳 에 저장 하 는 것 이 고, TlsGetValue 도 서로 다른 곳 에서 값 을 추출 합 니 다.
이것 이 바로 스 레 드 로 컬 저장 의 의미 입 니 다.
전환 하 다http://topic.csdn.net/u/20101029/17/5db5dd3a-dc66-4448-b050-01d64dcda23a.html

좋은 웹페이지 즐겨찾기