TNB Library
TnbSingleton.h
[詳解]
1#pragma once
11#include "TnbSharedMemory.h"
12#include "TnbStr.h"
13
14
15
16//TNB Library
17namespace TNB
18{
19
20
21
60#define SINGLETON_CONSTRUCTOR( CLS ) \
61 public: \
62 static CLS * GetInstance(void) \
63 { \
64 return CSingletonT<CLS>::Get(_T(#CLS)); \
65 } \
66 private: \
67 CCopyImpossible m_cCopyImpossible; \
68 friend class CSingletonT<CLS>; \
69 CLS(void)
70
71
72
85template<typename TYP>
87{
92 CSingletonT(void);
94 struct TInfo
95 {
96 LONG isInit;
97 LONG lRef;
98 TYP* pType;
99 };
101 class CDestory
102 {
103 TInfo* m_pInfo;
104 public:
106 CDestory(TInfo* P) : m_pInfo(P) {}
108 ~CDestory(void)
109 {
110 if ( m_pInfo->pType != NULL )
111 {
112 delete m_pInfo->pType;
113 m_pInfo->pType = NULL;
114 }
115 }
116 };
117
118public:
119
125 static TYP* Get(LPCTSTR lpszName)
126 {
127 static CSharedMemoryManager s_cSharedMem(true);
128 TInfo* pInfo = NULL;
129 if ( ! s_cSharedMem.HasMemory() )
130 {
131 CStr str = CStr::Fmt(_T("_!Tnb1Ton_%08X_%s"), ::GetCurrentProcessId(), lpszName);
132 int iRc = s_cSharedMem.Open(str, sizeof(TInfo));
133 if ( iRc < 0 )
134 {
135 ASSERTLIB(false);
136 return NULL;
137 }
138 pInfo = static_cast<TInfo*>(s_cSharedMem.Get());
139 if ( iRc == 0 )
140 { //新規だ
141 pInfo->pType = new TYP;
142 static CDestory s_cDest(pInfo); //TYP削除用オブジェクト
143 pInfo->lRef++;
144 pInfo->isInit = 1; //初期化済み
145 }
146 else
147 { //既存
148 while ( pInfo->isInit != 1 )
149 {
150 ::Sleep(1);
151 }
152 pInfo->lRef++;
153 }
154 }
155 else
156 {
157 pInfo = static_cast<TInfo*>(s_cSharedMem.Get());
158 while ( pInfo->isInit != 1 )
159 {
160 ::Sleep(1);
161 }
162 pInfo->lRef++;
163 }
164 return pInfo->pType;
165 }
166};
167
168
169
170};//TNB
共有メモリ関係のヘッダ
文字列管理関係のヘッダ
簡易共有メモリ管理クラス
LPVOID Get(void)
[取得] アドレス参照.
bool HasMemory(void)
[確認] 共有メモリの有無
int Open(LPCTSTR lpszMemName, UINT uMemSize)
[操作] オープン
シングルトンテンプレート
Definition: TnbSingleton.h:87
static TYP * Get(LPCTSTR lpszName)
[取得] インスタンス取得
Definition: TnbSingleton.h:125
static CStrT Fmt(const TCHAR *lpszFormat,...)
[作成] 書式付き文字列作成
Definition: TnbStr.h:1206
TNB Library
Definition: TnbDoxyTitle.txt:2