16#pragma comment(user,"T-Coverage Disable")
79 LONG m_lWaitExecutingCount;
97 m_lWaitExecutingCount = 0;
108 while ( m_lWaitExecutingCount != 0 )
112 if ( m_psyncSema != NULL )
116 if ( m_psyncEvent != NULL )
118 delete[] m_psyncEvent;
135 ASSERT0(
false,
"CCyclicBarrier::Init()",
"パーティ数が異常です。");
139 while ( m_lWaitExecutingCount != 0 )
143 if ( m_psyncSema != NULL )
149 if ( m_iParties != iParties )
151 if ( m_psyncEvent != NULL )
153 delete[] m_psyncEvent;
156 m_iParties = iParties;
159 loop ( i, m_iParties )
175 for (
int i = m_iParties - 1; i >= 0; i-- )
189 ::InterlockedIncrement(&m_lWaitExecutingCount);
196 lNo = m_lWaitingCount++;
201 loop ( i, m_iParties )
211 for (
int i = 1; i < m_iParties; i++ )
213 m_psyncEvent[i].
Lock();
218 if ( m_piListener != NULL )
232 else if ( m_iParties > lNo )
235 m_psyncEvent[lNo].
Unlock();
236 m_psyncEvent[0].
Lock();
237 iRc = (m_boIsReset) ? -1 : lNo;
245 ::InterlockedDecrement(&m_lWaitExecutingCount);
269#pragma comment(user,"T-Coverage Enable")
#define loop(VAR, CNT)
loop構文.
virtual bool Lock(DWORD dwTime=INFINITE) const
[排他] ロック
~CCyclicBarrier(void)
デストラクタ
bool Init(int iParties=2, IListener *I=NULL)
[設定] 初期化
CCyclicBarrier(int iParties=2, IListener *I=NULL)
コンストラクタ
int GetParties(void)
[取得] パーティ数
void Reset(void)
[操作] リセット
int GetNumberWaiting(void)
[取得] 待機数
void ToLock(void)
[排他] ロック状態にする
virtual void Unlock(void) const
[排他] アンロック
#define EXCLUSIVE(CLS)
簡易排他制御マクロ.
#define SYNCBLOCK(CLS)
簡易排他ブロック制御マクロ.
virtual ~IListener(void)
デストラクタ
virtual void OnGathered(void)=0
[通知] そろった通知