TNB Library
TnbSyncMetered.h
[詳解]
1#pragma once
13#include "TnbSync.h"
14
15
16
17//T-TestCaseコードカバレッジDisable
18#pragma comment(user,"T-Coverage Disable")
19
20
21
22//TNB Library
23namespace TNB
24{
25
26
27
28#ifndef _TnbDOXYGEN //Document作成用シンボル
29 namespace NMetered
30 {
31 //Mr.Dan Chou の排他Obj
32 #include "other/MeteredSection.h"
33 };
34#endif
35
36
37
56{
57 NMetered::LPMETERED_SECTION m_pms;
58 mutable LONG m_lLockCount;
59public:
60
69 explicit CSyncMetered(LPCTSTR lpszName = NULL, int iMaximumCount = 1)
70 {
71 ASSERTLIB( lpszName == NULL || STRLIB::GetLen(lpszName) < MAX_METSECT_NAMELEN );
72 m_pms = NMetered::CreateMeteredSection(iMaximumCount, iMaximumCount, lpszName);
73 m_lLockCount = 0;
74 ASSERT0(
75 m_pms != NULL,
76 "CSyncMetered::CSyncMetered()",
77 "MeteredSectionが初期化できませんした。名前に問題がある可能性が有ります。"
78 );
79 if ( m_pms == NULL )
80 {
82 }
83 }
84
89 virtual ~CSyncMetered(void)
90 {
91 if ( m_pms != NULL )
92 {
93 if ( m_lLockCount > 0 )
94 {
95 NMetered::LeaveMeteredSection(m_pms, m_lLockCount, NULL);
96 }
97 NMetered::CloseMeteredSection(m_pms);
98 m_pms = NULL;
99 }
100 }
101
108 virtual bool Lock(DWORD dwTime = INFINITE) const
109 {
110 if ( m_pms != NULL )
111 {
112 DWORD dwRc = NMetered::EnterMeteredSection(m_pms, dwTime);
113 if ( dwRc == WAIT_OBJECT_0 )
114 {
115 ::InterlockedIncrement(&m_lLockCount);
116 return true;
117 }
118 }
119 return false;
120 }
121
123 virtual void Unlock(void) const
124 {
125 if ( m_pms != NULL && m_lLockCount > 0 )
126 {
127 NMetered::LeaveMeteredSection(m_pms, 1, NULL);
128 ::InterlockedDecrement(&m_lLockCount);
129 }
130 }
131};
132
133
134
135}; // TNB
136
137
138
139//T-TestCaseコードカバレッジEnable
140#pragma comment(user,"T-Coverage Enable")
同期処理関係のヘッダ
[ETC] コピー不可能スーパークラス.
Definition: TnbDef.h:599
パラメータ不正例外
Definition: TnbException.h:159
Metered排他管理クラス
virtual ~CSyncMetered(void)
デストラクタ
CSyncMetered(LPCTSTR lpszName=NULL, int iMaximumCount=1)
コンストラクタ
virtual bool Lock(DWORD dwTime=INFINITE) const
[排他] ロック
virtual void Unlock(void) const
[排他] アンロック
size_t GetLen(LPCSTR lpsz)
[計算] 文字列長計算(ASCII/SJIS用)
Definition: TnbStrLib.h:44
TNB Library
Definition: TnbDoxyTitle.txt:2
排他基本インターフェース
Definition: TnbSync.h:40