Solution46
LibCommon::CSemaphore クラス

セマフォクラス [詳解]

#include "CSemaphore.h"

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

公開メンバ関数

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

静的限定公開変数類

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

非公開メンバ関数

 CSemaphore (CSemaphore const &)=delete
 
CSemaphoreoperator= (CSemaphore const &)=delete
 

その他の継承メンバ

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

詳解

セマフォクラス

セマフォクラスです。

注意
なし

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

構築子と解体子

LibCommon::CSemaphore::CSemaphore ( )
explicitnoexcept

コンストラクタ

コンストラクタです。

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

CSemaphore.cpp28 行目に定義があります。

30  : CSync()
31  {}
CSync() noexcept
コンストラクタ
Definition: CSync.cpp:28
virtual LibCommon::CSemaphore::~CSemaphore ( )
inlinevirtualnoexcept

デストラクタ

デストラクタです。

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

CSemaphore.h54 行目に定義があります。

54 {}
LibCommon::CSemaphore::CSemaphore ( CSemaphore const &  )
privatedelete

関数詳解

bool LibCommon::CSemaphore::Release ( )
overridevirtualnoexcept

リリース関数

リリース関数です。

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

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

CSemaphore.cpp37 行目に定義があります。

参照先 AddCount().

37  {
38  // 処理ブロック
39  bool result = false;
40  do {
41  // セマフォカウントを加算する
42  long prev;
43  result = AddCount( 1, prev );
44  } while ( false );
45 
46  // 実行結果を返す
47  return result;
48  }
virtual bool AddCount(long nCount, long &rnPrev) noexcept
カウント加算関数
Definition: CSemaphore.cpp:138

呼び出し関係図:

bool LibCommon::CSemaphore::Create ( wchar_t const *  pszObjectName = nullptr)
virtualnoexcept

作成関数

作成関数です。

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

CSemaphore.cpp52 行目に定義があります。

52  {
53  // 引数を指定して作成する
54  return Create( 1, 1, pszObjectName );
55  }
virtual bool Create(wchar_t const *pszObjectName=nullptr) noexcept
作成関数
Definition: CSemaphore.cpp:52
bool LibCommon::CSemaphore::Create ( LONG  nInitial,
LONG  nMax,
wchar_t const *  pszObjectName = nullptr 
)
virtualnoexcept

作成関数

作成関数です。

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

CSemaphore.cpp59 行目に定義があります。

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

59  {
60  // 処理ブロック
61  bool result = false;
62  do {
63  // セマフォハンドルを調べる
64  if ( nullptr != m_hObject ) {
65  // クローズする
66  Close();
67  }
68 
69  // オブジェクト名を調べる
70  wchar_t szBuffer[ MAX_PATH ];
71  if ( nullptr != pszObjectName ) {
72  // オブジェクト名に拡張子を追加する
73  ::wcscpy_s( szBuffer, pszObjectName );
74  ::wcscat_s( szBuffer, OBJECT_NAME_EXT );
75  pszObjectName = szBuffer;
76  }
77 
78  // セマフォを作成する
79  m_hObject = ::CreateSemaphoreW( nullptr, nInitial, nMax, pszObjectName );
80  if ( nullptr == m_hObject ) {
81  // 失敗!
82  break;
83  }
84  // エラーコードを調べる
85  else if ( ERROR_ALREADY_EXISTS != ::GetLastError() ) {
86  // 新規作成フラグをセットする
87  m_bIsCreate = true;
88  }
89 
90  // 成功!
91  result = true;
92  } while ( false );
93 
94  // 実行結果を返す
95  return result;
96  }
virtual void Close() noexcept
クローズ関数
Definition: CSync.cpp:45
bool m_bIsCreate
新規作成フラグ
Definition: CSync.h:153
static wchar_t const *const OBJECT_NAME_EXT
オブジェクト名拡張子
Definition: CSemaphore.h:130
HANDLE m_hObject
オブジェクトハンドル
Definition: CSync.h:152

呼び出し関係図:

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

オープン関数

オープン関数です。

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

CSemaphore.cpp100 行目に定義があります。

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

100  {
101  // 処理ブロック
102  bool result = false;
103  do {
104  // オブジェクト名を調べる
105  if ( nullptr == pszObjectName ) {
106  // 失敗!
107  break;
108  }
109  // セマフォハンドルを調べる
110  else if ( nullptr != m_hObject ) {
111  // クローズする
112  Close();
113  }
114 
115  // オブジェクト名に拡張子を追加する
116  wchar_t szBuffer[ MAX_PATH ];
117  ::wcscpy_s( szBuffer, pszObjectName );
118  ::wcscat_s( szBuffer, OBJECT_NAME_EXT );
119  pszObjectName = szBuffer;
120 
121  // セマフォをオープンする
122  m_hObject = ::OpenSemaphoreW( SEMAPHORE_ALL_ACCESS, false, pszObjectName );
123  if ( nullptr == m_hObject ) {
124  // 失敗!
125  break;
126  }
127 
128  // 成功!
129  result = true;
130  } while ( false );
131 
132  // 実行結果を返す
133  return result;
134  }
virtual void Close() noexcept
クローズ関数
Definition: CSync.cpp:45
static wchar_t const *const OBJECT_NAME_EXT
オブジェクト名拡張子
Definition: CSemaphore.h:130
HANDLE m_hObject
オブジェクトハンドル
Definition: CSync.h:152

呼び出し関係図:

bool LibCommon::CSemaphore::AddCount ( long  nCount,
long &  rnPrev 
)
virtualnoexcept

カウント加算関数

カウント加算関数です。

引数
[in]nCount加算カウント
[out]rnPrev直前のカウント参照
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

CSemaphore.cpp138 行目に定義があります。

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

参照元 Release().

138  {
139  // 処理ブロック
140  bool result = false;
141  do {
142  // セマフォカウントを加算する
143  if ( 0 == ::ReleaseSemaphore( m_hObject, nCount, &rnPrev ) ) {
144  // 失敗!
145  break;
146  }
147 
148  // 成功!
149  result = true;
150  } while ( false );
151 
152  // 実行結果を返す
153  return result;
154  }
HANDLE m_hObject
オブジェクトハンドル
Definition: CSync.h:152

被呼び出し関係図:

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

メンバ詳解

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

オブジェクト名拡張子

CSemaphore.h130 行目に定義があります。

参照元 AddCount(), Create(), Open().


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