Solution46
LibCommon::CTimer クラス

タイマクラス [詳解]

#include "CTimer.h"

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

公開メンバ関数

 CTimer () noexcept
 コンストラクタ [詳解]
 
 CTimer (DWORD dwTime) noexcept
 コンストラクタ [詳解]
 
virtual ~CTimer () noexcept
 デストラクタ [詳解]
 
virtual bool IsSet () const noexcept
 タイマセット状態取得関数 [詳解]
 
virtual void Close () noexcept override
 クローズ関数 [詳解]
 
virtual bool Wait (DWORD dwTime=INFINITE) noexcept override
 ウェイト関数 [詳解]
 
virtual bool Release () noexcept override
 リリース関数 [詳解]
 
virtual bool Create (wchar_t const *pszObjectName=nullptr) noexcept
 作成関数 [詳解]
 
virtual bool Open (wchar_t const *pszObjectName) noexcept
 オープン関数 [詳解]
 
virtual bool Set (DWORD dwTime) noexcept
 タイマ設定関数 [詳解]
 
virtual bool SetNano100 (LONGLONG llWait, LONG nPeriod=0, PTIMERAPCROUTINE pfnCallBack=nullptr, LPVOID lpParam=nullptr, bool bResume=false) noexcept
 100ナノタイマ設定関数 [詳解]
 
virtual bool Cancel () noexcept
 タイマ解除関数 [詳解]
 
- 基底クラス LibCommon::CSync に属する継承公開メンバ関数
 CSync () noexcept
 コンストラクタ [詳解]
 
virtual ~CSync () noexcept
 デストラクタ [詳解]
 
virtual HANDLE GetHandle () const noexcept
 オブジェクトハンドル取得関数 [詳解]
 
virtual bool IsCreate () const noexcept
 新規作成状態取得関数 [詳解]
 
virtual bool Lock (DWORD dwTime=INFINITE) noexcept
 ロック関数 [詳解]
 
virtual bool Unlock () noexcept
 ロック解除関数 [詳解]
 

限定公開変数類

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

静的限定公開変数類

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

非公開メンバ関数

 CTimer (CTimer const &)=delete
 
CTimeroperator= (CTimer const &)=delete
 

詳解

タイマクラス

タイマクラスです。

注意
なし

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

構築子と解体子

LibCommon::CTimer::CTimer ( )
explicitnoexcept

コンストラクタ

コンストラクタです。

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

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

30  : CSync()
31  // メンバ変数初期化
32  , m_bInfinite( false )
33  , m_bSet( false )
34  {}
bool m_bSet
タイマセットフラグ
Definition: CTimer.h:201
CSync() noexcept
コンストラクタ
Definition: CSync.cpp:28
bool m_bInfinite
無限待機フラグ
Definition: CTimer.h:200
LibCommon::CTimer::CTimer ( DWORD  dwTime)
explicitnoexcept

コンストラクタ

コンストラクタです。

引数
[in]dwTime待機時間
戻り値
なし
注意
なし

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

参照先 Create(), Set().

40  : CTimer()
41  {
42  // 作成する
43  Create();
44 
45  // タイマを設定する
46  Set( dwTime );
47  }
CTimer() noexcept
コンストラクタ
Definition: CTimer.cpp:28
virtual bool Set(DWORD dwTime) noexcept
タイマ設定関数
Definition: CTimer.cpp:182
virtual bool Create(wchar_t const *pszObjectName=nullptr) noexcept
作成関数
Definition: CTimer.cpp:103

呼び出し関係図:

LibCommon::CTimer::~CTimer ( )
virtualnoexcept

デストラクタ

デストラクタです。

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

CTimer.cpp51 行目に定義があります。

参照先 Close().

51  {
52  // クローズする
53  Close();
54  }
virtual void Close() noexcept override
クローズ関数
Definition: CTimer.cpp:60

呼び出し関係図:

LibCommon::CTimer::CTimer ( CTimer const &  )
privatedelete

関数詳解

virtual bool LibCommon::CTimer::IsSet ( ) const
inlinevirtualnoexcept

タイマセット状態取得関数

タイマセット状態取得関数です。

引数
なし
戻り値
タイマセット状態
  • true セット状態
  • false 非セット状態
注意
なし

CTimer.h81 行目に定義があります。

81 { return m_bSet; }
bool m_bSet
タイマセットフラグ
Definition: CTimer.h:201
void LibCommon::CTimer::Close ( )
overridevirtualnoexcept

クローズ関数

クローズ関数です。

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

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

CTimer.cpp60 行目に定義があります。

参照先 LibCommon::CSync::Close(), m_bInfinite, m_bSet.

参照元 Create(), Open(), ~CTimer().

60  {
61  // 基底クラスの関数を実行する
62  CSync::Close();
63 
64  // メンバ変数をクリアする
65  m_bInfinite = false;
66  m_bSet = false;
67  }
virtual void Close() noexcept
クローズ関数
Definition: CSync.cpp:45
bool m_bSet
タイマセットフラグ
Definition: CTimer.h:201
bool m_bInfinite
無限待機フラグ
Definition: CTimer.h:200

呼び出し関係図:

被呼び出し関係図:

bool LibCommon::CTimer::Wait ( DWORD  dwTime = INFINITE)
overridevirtualnoexcept

ウェイト関数

ウェイト関数です。

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

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

CTimer.cpp71 行目に定義があります。

参照先 m_bInfinite, m_bSet, LibCommon::CSync::Wait().

参照元 LibWindow::CWndMain::EndFrame(), LibCommon::CConsole::InputChar(), LibCommon::CConsole::InputRecord().

71  {
72  // 処理ブロック
73  bool result = false;
74  do {
75  // 無限待機フラグを調べる
76  if ( m_bInfinite ) {
77  // 失敗!
78  break;
79  }
80  // タイマセットフラグを調べる
81  else if ( !m_bSet ) {
82  // 失敗!
83  break;
84  }
85 
86  // 同期オブジェクトをウェイトする
87  result = CSync::Wait( dwTime );
88  } while ( false );
89 
90  // 実行結果を返す
91  return result;
92  }
bool m_bSet
タイマセットフラグ
Definition: CTimer.h:201
virtual bool Wait(DWORD dwTime=INFINITE) noexcept
ウェイト関数
Definition: CSync.cpp:59
bool m_bInfinite
無限待機フラグ
Definition: CTimer.h:200

呼び出し関係図:

被呼び出し関係図:

bool LibCommon::CTimer::Release ( )
overridevirtualnoexcept

リリース関数

リリース関数です。

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

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

CTimer.cpp96 行目に定義があります。

参照先 Cancel().

96  {
97  // タイマを解除する
98  return Cancel();
99  }
virtual bool Cancel() noexcept
タイマ解除関数
Definition: CTimer.cpp:257

呼び出し関係図:

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

作成関数

作成関数です。

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

CTimer.cpp103 行目に定義があります。

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

参照元 CTimer(), LibWindow::CWndMain::InitFrame().

103  {
104  // 処理ブロック
105  bool result = false;
106  do {
107  // タイマハンドルを調べる
108  if ( nullptr != m_hObject ) {
109  // クローズする
110  Close();
111  }
112 
113  // オブジェクト名を調べる
114  wchar_t szBuffer[ MAX_PATH ];
115  if ( nullptr != pszObjectName ) {
116  // オブジェクト名に拡張子を追加する
117  ::wcscpy_s( szBuffer, pszObjectName );
118  ::wcscat_s( szBuffer, OBJECT_NAME_EXT );
119  pszObjectName = szBuffer;
120  }
121 
122  // タイマを作成する
123  m_hObject = ::CreateWaitableTimerW( nullptr, false, pszObjectName );
124  if ( nullptr == m_hObject ) {
125  // 失敗!
126  break;
127  }
128  // エラーコードを調べる
129  else if ( ERROR_ALREADY_EXISTS != ::GetLastError() ) {
130  // 新規作成フラグをセットする
131  m_bIsCreate = true;
132  }
133 
134  // 成功!
135  result = true;
136  } while ( false );
137 
138  // 実行結果を返す
139  return result;
140  }
static wchar_t const *const OBJECT_NAME_EXT
オブジェクト名拡張子
Definition: CTimer.h:195
bool m_bIsCreate
新規作成フラグ
Definition: CSync.h:153
HANDLE m_hObject
オブジェクトハンドル
Definition: CSync.h:152
virtual void Close() noexcept override
クローズ関数
Definition: CTimer.cpp:60

呼び出し関係図:

被呼び出し関係図:

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

オープン関数

オープン関数です。

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

CTimer.cpp144 行目に定義があります。

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

144  {
145  // 処理ブロック
146  bool result = false;
147  do {
148  // オブジェクト名を調べる
149  if ( nullptr == pszObjectName ) {
150  // 失敗!
151  break;
152  }
153  // タイマハンドルを調べる
154  else if ( nullptr != m_hObject ) {
155  // クローズする
156  Close();
157  }
158 
159  // オブジェクト名に拡張子を追加する
160  wchar_t szBuffer[ MAX_PATH ];
161  ::wcscpy_s( szBuffer, pszObjectName );
162  ::wcscat_s( szBuffer, OBJECT_NAME_EXT );
163  pszObjectName = szBuffer;
164 
165  // タイマをオープンする
166  m_hObject = ::OpenWaitableTimerW( TIMER_ALL_ACCESS, false, pszObjectName );
167  if ( nullptr == m_hObject ) {
168  // 失敗!
169  break;
170  }
171 
172  // 成功!
173  result = true;
174  } while ( false );
175 
176  // 実行結果を返す
177  return result;
178  }
static wchar_t const *const OBJECT_NAME_EXT
オブジェクト名拡張子
Definition: CTimer.h:195
HANDLE m_hObject
オブジェクトハンドル
Definition: CSync.h:152
virtual void Close() noexcept override
クローズ関数
Definition: CTimer.cpp:60

呼び出し関係図:

bool LibCommon::CTimer::Set ( DWORD  dwTime)
virtualnoexcept

タイマ設定関数

タイマ設定関数です。

引数
[in]dwTime待機時間(msec)
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

CTimer.cpp182 行目に定義があります。

参照先 Cancel(), m_bInfinite, m_bSet, LibCommon::CSync::m_hObject, SetNano100().

参照元 CTimer().

182  {
183  // 処理ブロック
184  bool result = false;
185  do {
186  // タイマハンドルを調べる
187  if ( nullptr == m_hObject ) {
188  // 失敗!
189  break;
190  }
191  // タイマセットフラグを調べる
192  else if ( m_bSet ) {
193  // タイマをキャンセルする
194  Cancel();
195  }
196 
197  // 待機時間を調べる
198  if ( INFINITE == dwTime ) {
199  // 無限待機フラグをセットする
200  m_bInfinite = true;
201 
202  // 成功!
203  result = true;
204  break;
205  }
206 
207  // 100ナノタイマを設定する
208  LONGLONG llWait = ( -10LL * 1000 * dwTime );
209  result = SetNano100( llWait );
210  } while ( false );
211 
212  // 実行結果を返す
213  return result;
214  }
bool m_bSet
タイマセットフラグ
Definition: CTimer.h:201
virtual bool SetNano100(LONGLONG llWait, LONG nPeriod=0, PTIMERAPCROUTINE pfnCallBack=nullptr, LPVOID lpParam=nullptr, bool bResume=false) noexcept
100ナノタイマ設定関数
Definition: CTimer.cpp:218
HANDLE m_hObject
オブジェクトハンドル
Definition: CSync.h:152
virtual bool Cancel() noexcept
タイマ解除関数
Definition: CTimer.cpp:257
bool m_bInfinite
無限待機フラグ
Definition: CTimer.h:200

呼び出し関係図:

被呼び出し関係図:

bool LibCommon::CTimer::SetNano100 ( LONGLONG  llWait,
LONG  nPeriod = 0,
PTIMERAPCROUTINE  pfnCallBack = nullptr,
LPVOID  lpParam = nullptr,
bool  bResume = false 
)
virtualnoexcept

100ナノタイマ設定関数

100ナノタイマ設定関数です。

引数
[in]llWait待機時間( 100 nsec )
[in]nPeriod周期時間( 1 msec )
[in]pfnCallBackコールバック関数ポインタ
[in]lpParamコールバック関数引数ポインタ
[in]bResume再開フラグ
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

CTimer.cpp218 行目に定義があります。

参照先 m_bInfinite, m_bSet, LibCommon::CSync::m_hObject.

参照元 Set(), LibWindow::CWndMain::StartFrame().

218  {
219  // 処理ブロック
220  bool result = false;
221  do {
222  // 無限待機フラグをクリアする
223  m_bInfinite = false;
224 
225  // タイマをアクティブにする
226  LARGE_INTEGER sDueTime;
227  sDueTime.QuadPart = llWait;
228  if ( 0 == ::SetWaitableTimer( m_hObject, &sDueTime, nPeriod, pfnCallBack, lpParam, bResume ) ) {
229  // 失敗!
230  break;
231  }
232  // 再開フラグを調べる
233  else if ( bResume ) {
234  // ラストエラーを調べる
235  if ( ERROR_NOT_SUPPORTED == ::GetLastError() ) {
236  // タイマをキャンセルする
237  ::CancelWaitableTimer( m_hObject );
238 
239  // 失敗!
240  break;
241  }
242  }
243 
244  // タイマセットフラグをセットする
245  m_bSet = true;
246 
247  // 成功!
248  result = true;
249  } while ( false );
250 
251  // 実行結果を返す
252  return result;
253  }
bool m_bSet
タイマセットフラグ
Definition: CTimer.h:201
HANDLE m_hObject
オブジェクトハンドル
Definition: CSync.h:152
bool m_bInfinite
無限待機フラグ
Definition: CTimer.h:200

被呼び出し関係図:

bool LibCommon::CTimer::Cancel ( )
virtualnoexcept

タイマ解除関数

タイマ解除関数です。

引数
なし
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

CTimer.cpp257 行目に定義があります。

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

参照元 Release(), Set().

257  {
258  // 処理ブロック
259  bool result = false;
260  do {
261  // 無限待機フラグを調べる
262  if ( m_bInfinite ) {
263  // 無限待機フラグをクリアする
264  m_bInfinite = false;
265  }
266  // タイマセットフラグを調べる
267  else if ( m_bSet ) {
268  // タイマをキャンセルする
269  if ( 0 == ::CancelWaitableTimer( m_hObject ) ) {
270  // 失敗!
271  break;
272  }
273 
274  // タイマセットフラグをクリアする
275  m_bSet = false;
276  }
277 
278  // 成功!
279  result = true;
280  } while ( false );
281 
282  // 実行結果を返す
283  return result;
284  }
bool m_bSet
タイマセットフラグ
Definition: CTimer.h:201
HANDLE m_hObject
オブジェクトハンドル
Definition: CSync.h:152
bool m_bInfinite
無限待機フラグ
Definition: CTimer.h:200

被呼び出し関係図:

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

メンバ詳解

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

オブジェクト名拡張子

CTimer.h195 行目に定義があります。

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

bool LibCommon::CTimer::m_bInfinite
protected

無限待機フラグ

CTimer.h200 行目に定義があります。

参照元 Cancel(), Close(), Set(), SetNano100(), Wait().

bool LibCommon::CTimer::m_bSet
protected

タイマセットフラグ

CTimer.h201 行目に定義があります。

参照元 Cancel(), Close(), Set(), SetNano100(), Wait().


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