WaitableTimer排他管理クラス
[詳解]
#include <TnbSyncWaitableTimer.h>
WaitableTimer排他管理クラス
WaitableTimerを使った同期を実現します。
- 覚え書き
- 多少他の ISynchronized を実装している排他クラスとは使用方法が異なります。
-
定期的にアンロックを発生させる場合、タイミング(処理内容)によっては、 二つ以上のスレッドが同時に動くことがあります(指定時間ごとに、アンロックになるため)。
- 使用例
static CSyncWaitableTimer s_timer;
DWORD WINAPI DoThread(DWORD ThreadCount)
{
for ( int i = 0; i < 5; i++)
{
EXCLUSIVE(&s_timer);
TRACE1("スレッド%d: 処理開始\n", ThreadCount);
Sleep(400*ThreadCount);
TRACE1("スレッド%d: 処理終了\n", ThreadCount);
}
return 0;
}
void Main()
{
HANDLE hThread[2];
DWORD ThreadID[2];
for ( int i = 0; i < 2; i++ )
{
hThread[i] = CreateThread(
NULL, 0, (LPTHREAD_START_ROUTINE)DoThread,
(LPVOID)i, 0, &ThreadID[i]);
}
TRACE0("開始\n");
s_timer.Start(1000,1000);
WaitForMultipleObjects(2, hThread, TRUE, INFINITE);// スレッドの終了まで待機
CloseHandle(hThread[0]);
CloseHandle(hThread[1]);
}
|
- 参照
- http://msdn.microsoft.com/library/ja/jpdllpro/html/_win32_createwaitabletimer.asp
- 必要ファイル
- TnbSyncWaitableTimer.h
- 日付
- 06/09/21 新規作成
-
06/11/15 作成失敗したら スローするように変更。
TnbSyncWaitableTimer.h の 86 行目に定義があります。
◆ CSyncWaitableTimer() [1/2]
コンストラクタ
- 覚え書き
- 作成時は、ロック状態です。
- 引数
-
boIsManualReset | falseか省略なら自動リセットオブジェクト、 trueなら手動リセットオブジェクトになります。 |
lpszName | Eventの名前。省略可能。 |
- 例外
-
TnbSyncWaitableTimer.h の 100 行目に定義があります。
◆ CSyncWaitableTimer() [2/2]
◆ ~CSyncWaitableTimer()
◆ GetHandle()
virtual HANDLE GetHandle |
( |
void |
| ) |
const |
|
virtual |
◆ Lock()
virtual bool Lock |
( |
DWORD |
dwTime = INFINITE | ) |
const |
|
virtualinherited |
◆ operator HANDLE()
operator HANDLE |
( |
void |
| ) |
const |
|
inherited |
◆ Start()
bool Start |
( |
DWORD |
dwLagTime, |
|
|
DWORD |
dwInterval |
|
) |
| |
[排他] 開始
- 引数
-
dwLagTime | 開始までの時間(ms) |
dwInterval | 開始後、定期的にアンロックになる間隔(ms)。
0を指定すると、最初一回アンロック後、ずっとロック状態になります。 もう一度 Start をする必要があります。 |
- 戻り値
-
TnbSyncWaitableTimer.h の 161 行目に定義があります。
◆ ToLock()
◆ Unlock()
virtual void Unlock |
( |
void |
| ) |
const |
|
virtual |