TNB Library
TnbThreadLocalStorage.h
[詳解]
1#pragma once
14#include "TnbDef.h"
15
16
17
18namespace TNB
19{
20
21
22
23#ifndef _TnbDOXYGEN //Document作成用シンボル
24#ifndef TLS_OUT_OF_INDEXES
25 #define TLS_OUT_OF_INDEXES ((DWORD)0xFFFFFFFF)
26#endif
27#endif
28
29
30
48template<typename TYP>
50{
51 DWORD m_dwTlsIndex;
52
53public:
54
57 {
58 ASSERT1( sizeof(LPVOID) >= sizeof(TYP),
59 "CThreadLocalStorageT", "使用出来ない型(%s)が指定されています", typeid(TYP).name() );
60 m_dwTlsIndex = ::TlsAlloc();
61 if ( m_dwTlsIndex == TLS_OUT_OF_INDEXES )
62 {
63 throw CEmptyException();
64 }
65 }
66
69 {
70 ::TlsFree(m_dwTlsIndex);
71 }
72
78 TYP Get(void) const
79 {
80 return reinterpret_cast<TYP>(::TlsGetValue(m_dwTlsIndex));
81 }
82
88 void Set(const TYP& t)
89 {
90 ::TlsSetValue(m_dwTlsIndex, reinterpret_cast<LPVOID>(t));
91 }
92
98 DWORD GetTlsIndex(void) const
99 {
100 return m_dwTlsIndex;
101 }
102};
103
104
105#if 0
106class CLastErrorManage
107{
108 CThreadLocalStorageT<BYTE> m_tlsError;
109
110public:
111
113 CLastErrorManage(void)
114 {
115 }
116
117 DWORD GetLastError(void) const
118 {
119 return m_tlsError.Get();
120 }
121
122 void SetLastError(DWORD dwError=::GetLastError())
123 {
124 m_tlsError.Set(dwError);
125 }
126};
127#endif
128
129
130
131}; //TNB
132
133
134
135
136
137
TNBライブラリの定義ヘッダ
取得要素(空き)無し例外
Definition: TnbException.h:107
スレッドローカル領域テンプレートクラス
DWORD GetTlsIndex(void) const
[取得] TLSインデックス取得
~CThreadLocalStorageT(void)
デストラクタ
void Set(const TYP &t)
[設定] 値設定
CThreadLocalStorageT(void)
コンストラクタ
TYP Get(void) const
[取得] 値取得
TNB Library
Definition: TnbDoxyTitle.txt:2