초기 스 레 드, TlsSetValue
//
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Exception in thread main java.lang. NoClassDefFoundError 오류 해결 방법즉,/home/hadoop/jarfile) 시스템은 Hello World 패키지 아래의class라는 클래스 파일을 실행하고 있다고 오인하여 시스템의 CLASSPATH 아래 (일반적으로 현재 디렉터리를 포함) Hell...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.