+ void Set(bool bBroadcast = false)
+ {
+ CLockObject lock(m_mutex);
+ m_bPredicate = true;
+ m_bBroadcast = bBroadcast;
+ }
+
+ bool ResetAndReturn(void)
+ {
+ CLockObject lock(m_mutex);
+ bool bReturn(m_bPredicate);
+ if (bReturn && (--m_iWaitingThreads == 0 || !m_bBroadcast))
+ m_bPredicate = false;
+ return bReturn;
+ }
+
+ CMutex m_mutex;