Solution46
LibCommon::CMutex クラス

ミューテックスクラス [詳解]

#include "CMutex.h"

LibCommon::CMutex の継承関係図
Inheritance graph
LibCommon::CMutex 連携図
Collaboration graph

公開メンバ関数

 CMutex () noexcept
 コンストラクタ [詳解]
 
virtual ~CMutex () noexcept
 デストラクタ [詳解]
 
virtual void Close () noexcept override
 クローズ関数 [詳解]
 
virtual bool Release () noexcept override
 リリース関数 [詳解]
 
virtual bool Lock (DWORD dwTime=INFINITE) noexcept override
 ロック関数 [詳解]
 
virtual bool Unlock () noexcept override
 ロック解除関数 [詳解]
 
virtual bool Create (wchar_t const *pszObjectName=nullptr) noexcept
 作成関数 [詳解]
 
virtual bool Open (wchar_t const *pszObjectName) noexcept
 オープン関数 [詳解]
 
- 基底クラス LibCommon::CSync に属する継承公開メンバ関数
 CSync () noexcept
 コンストラクタ [詳解]
 
virtual ~CSync () noexcept
 デストラクタ [詳解]
 
virtual HANDLE GetHandle () const noexcept
 オブジェクトハンドル取得関数 [詳解]
 
virtual bool IsCreate () const noexcept
 新規作成状態取得関数 [詳解]
 
virtual bool Wait (DWORD dwTime=INFINITE) noexcept
 ウェイト関数 [詳解]
 

限定公開変数類

DWORD m_dwLockCount
 ロックカウント [詳解]
 
- 基底クラス LibCommon::CSync に属する継承限定公開変数類
HANDLE m_hObject
 オブジェクトハンドル [詳解]
 
bool m_bIsCreate
 新規作成フラグ [詳解]
 

静的限定公開変数類

static wchar_t const *const OBJECT_NAME_EXT = L".CMutex"
 オブジェクト名拡張子 [詳解]
 

非公開メンバ関数

 CMutex (CMutex const &)=delete
 
CMutexoperator= (CMutex const &)=delete
 

詳解

ミューテックスクラス

ミューテックスクラスです。

注意
なし

CMutex.h30 行目に定義があります。

構築子と解体子

LibCommon::CMutex::CMutex ( )
explicitnoexcept

コンストラクタ

コンストラクタです。

引数
なし
戻り値
なし
注意
なし

CMutex.cpp29 行目に定義があります。

31  : CSync()
32  // メンバ変数初期化
33  , m_dwLockCount( 0 )
34  {}
DWORD m_dwLockCount
ロックカウント
Definition: CMutex.h:143
CSync() noexcept
コンストラクタ
Definition: CSync.cpp:28
LibCommon::CMutex::~CMutex ( )
virtualnoexcept

デストラクタ

デストラクタです。

引数
なし
戻り値
なし
注意
なし

CMutex.cpp38 行目に定義があります。

参照先 Close().

38  {
39  // クローズする
40  Close();
41  }
virtual void Close() noexcept override
クローズ関数
Definition: CMutex.cpp:47

呼び出し関係図:

LibCommon::CMutex::CMutex ( CMutex const &  )
privatedelete

関数詳解

void LibCommon::CMutex::Close ( )
overridevirtualnoexcept

クローズ関数

クローズ関数です。

引数
なし
戻り値
なし
注意
オーバライド関数です。

LibCommon::CSyncを再実装しています。

LibCommon::CMappingで再実装されています。

CMutex.cpp47 行目に定義があります。

参照先 LibCommon::CSync::Close(), m_dwLockCount.

参照元 LibCommon::CMapping::Close(), LibCommon::CMapping::Create(), Create(), LibCommon::CMapping::Open(), Open(), ~CMutex().

47  {
48  // 基底クラスの関数を実行する
49  CSync::Close();
50 
51  // メンバ変数をクリアする
52  m_dwLockCount = 0;
53  }
virtual void Close() noexcept
クローズ関数
Definition: CSync.cpp:45
DWORD m_dwLockCount
ロックカウント
Definition: CMutex.h:143

呼び出し関係図:

被呼び出し関係図:

bool LibCommon::CMutex::Release ( )
overridevirtualnoexcept

リリース関数

リリース関数です。

引数
なし
戻り値
実行結果
  • true 成功
  • false 失敗
注意
オーバライド関数です。

LibCommon::CSyncを実装しています。

CMutex.cpp57 行目に定義があります。

参照先 LibCommon::CSync::m_hObject, NotifyFatalError.

57  {
58  // 処理ブロック
59  bool result = false;
60  do {
61  // ミューテックス所有権を解放する
62  if ( 0 == ::ReleaseMutex( m_hObject ) ) {
63  // 致命的エラー!
65  break;
66  }
67 
68  // 成功!
69  result = true;
70  } while ( false );
71 
72  // 実行結果を返す
73  return result;
74  }
#define NotifyFatalError()
致命的エラー発生通知マクロ
Definition: LibUtility.h:22
HANDLE m_hObject
オブジェクトハンドル
Definition: CSync.h:152
bool LibCommon::CMutex::Lock ( DWORD  dwTime = INFINITE)
overridevirtualnoexcept

ロック関数

ロック関数です。

引数
[in]dwTime待機時間
戻り値
実行結果
  • true 成功
  • false 失敗
注意
オーバライド関数です。

LibCommon::CSyncを再実装しています。

CMutex.cpp78 行目に定義があります。

参照先 m_dwLockCount, NotifyFatalError, LibCommon::CSync::Wait().

78  {
79  // 処理ブロック
80  bool result = false;
81  do {
82  // ロックカウントを調べる
83  if ( UINT_MAX == m_dwLockCount ) {
84  // 致命的エラー!
86  break;
87  }
88  // ウェイトする
89  else if ( !Wait( dwTime ) ) {
90  // 待機時間を調べる
91  if ( INFINITE == dwTime ) {
92  // 致命的エラー!
94  }
95 
96  // 失敗!
97  break;
98  }
99 
100  // ロックカウントをインクリメントする
101  ++m_dwLockCount;
102 
103  // 成功!
104  result = true;
105  } while ( false );
106 
107  // 実行結果を返す
108  return result;
109  }
#define NotifyFatalError()
致命的エラー発生通知マクロ
Definition: LibUtility.h:22
DWORD m_dwLockCount
ロックカウント
Definition: CMutex.h:143
virtual bool Wait(DWORD dwTime=INFINITE) noexcept
ウェイト関数
Definition: CSync.cpp:59

呼び出し関係図:

bool LibCommon::CMutex::Unlock ( )
overridevirtualnoexcept

ロック解除関数

ロック解除関数です。

引数
なし
戻り値
実行結果
  • true 成功
  • false 失敗
注意
オーバライド関数です。

LibCommon::CSyncを再実装しています。

CMutex.cpp113 行目に定義があります。

参照先 m_dwLockCount, LibCommon::CSync::m_hObject, NotifyFatalError.

113  {
114  // 処理ブロック
115  bool result = false;
116  do {
117  // ロックカウントを調べる
118  if ( 0 == m_dwLockCount ) {
119  // 致命的エラー!
121  break;
122  }
123  // リリースする
124  else if ( 0 == ::ReleaseMutex( m_hObject ) ) {
125  // 致命的エラー!
127  break;
128  }
129 
130  // ロックカウントをデクリメントする
131  --m_dwLockCount;
132 
133  // 成功!
134  result = true;
135  } while ( false );
136 
137  // 実行結果を返す
138  return result;
139  }
#define NotifyFatalError()
致命的エラー発生通知マクロ
Definition: LibUtility.h:22
DWORD m_dwLockCount
ロックカウント
Definition: CMutex.h:143
HANDLE m_hObject
オブジェクトハンドル
Definition: CSync.h:152
bool LibCommon::CMutex::Create ( wchar_t const *  pszObjectName = nullptr)
virtualnoexcept

作成関数

作成関数です。

引数
[in]pszObjectNameオブジェクト名
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

CMutex.cpp143 行目に定義があります。

参照先 Close(), LibCommon::CSync::m_bIsCreate, LibCommon::CSync::m_hObject, OBJECT_NAME_EXT.

参照元 LibCommon::CConsole::CConsole(), LibCommon::CMapping::Create().

143  {
144  // 処理ブロック
145  bool result = false;
146  do {
147  // オブジェクトハンドルを調べる
148  if ( nullptr != m_hObject ) {
149  // クローズする
150  Close();
151  }
152 
153  // オブジェクト名を調べる
154  wchar_t szBuffer[ MAX_PATH ];
155  if ( nullptr != pszObjectName ) {
156  // オブジェクト名に拡張子を追加する
157  ::wcscpy_s( szBuffer, pszObjectName );
158  ::wcscat_s( szBuffer, OBJECT_NAME_EXT );
159  pszObjectName = szBuffer;
160  }
161 
162  // ミューテックスを作成する
163  m_hObject = ::CreateMutexW( nullptr, false, pszObjectName );
164  if ( nullptr == m_hObject ) {
165  // 失敗!
166  break;
167  }
168  // エラーコードを調べる
169  else if ( ERROR_ALREADY_EXISTS != ::GetLastError() ) {
170  // 新規作成フラグをセットする
171  m_bIsCreate = true;
172  }
173 
174  // 成功!
175  result = true;
176  } while ( false );
177 
178  // 実行結果を返す
179  return result;
180  }
bool m_bIsCreate
新規作成フラグ
Definition: CSync.h:153
HANDLE m_hObject
オブジェクトハンドル
Definition: CSync.h:152
virtual void Close() noexcept override
クローズ関数
Definition: CMutex.cpp:47
static wchar_t const *const OBJECT_NAME_EXT
オブジェクト名拡張子
Definition: CMutex.h:138

呼び出し関係図:

被呼び出し関係図:

bool LibCommon::CMutex::Open ( wchar_t const *  pszObjectName)
virtualnoexcept

オープン関数

オープン関数です。

引数
[in]pszObjectNameオブジェクト名
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

LibCommon::CMappingで再実装されています。

CMutex.cpp184 行目に定義があります。

参照先 Close(), LibCommon::CSync::m_hObject, OBJECT_NAME_EXT.

参照元 LibCommon::CMapping::Open().

184  {
185  // 処理ブロック
186  bool result = false;
187  do {
188  // オブジェクト名を調べる
189  if ( nullptr == pszObjectName ) {
190  // 失敗!
191  break;
192  }
193  // オブジェクトハンドルを調べる
194  else if ( nullptr != m_hObject ) {
195  // クローズする
196  Close();
197  }
198 
199  // オブジェクト名に拡張子を追加する
200  wchar_t szBuffer[ MAX_PATH ];
201  ::wcscpy_s( szBuffer, pszObjectName );
202  ::wcscat_s( szBuffer, OBJECT_NAME_EXT );
203  pszObjectName = szBuffer;
204 
205  // ミューテックスをオープンする
206  m_hObject = ::OpenMutexW( MUTEX_ALL_ACCESS, false, pszObjectName );
207  if ( nullptr == m_hObject ) {
208  // 失敗!
209  break;
210  }
211 
212  // 成功!
213  result = true;
214  } while ( false );
215 
216  // 実行結果を返す
217  return result;
218  }
HANDLE m_hObject
オブジェクトハンドル
Definition: CSync.h:152
virtual void Close() noexcept override
クローズ関数
Definition: CMutex.cpp:47
static wchar_t const *const OBJECT_NAME_EXT
オブジェクト名拡張子
Definition: CMutex.h:138

呼び出し関係図:

被呼び出し関係図:

CMutex& LibCommon::CMutex::operator= ( CMutex const &  )
privatedelete

メンバ詳解

wchar_t const *const LibCommon::CMutex::OBJECT_NAME_EXT = L".CMutex"
staticprotected

オブジェクト名拡張子

CMutex.h138 行目に定義があります。

参照元 Create(), Open().

DWORD LibCommon::CMutex::m_dwLockCount
protected

ロックカウント

CMutex.h143 行目に定義があります。

参照元 Close(), Lock(), Unlock().


このクラス詳解は次のファイルから抽出されました: