27 CStdCSec() { InitializeCriticalSection(&sec); }
28 virtual ~CStdCSec() { DeleteCriticalSection(&sec); }
34 virtual void Enter() { EnterCriticalSection(&sec); }
35 virtual void Leave() { LeaveCriticalSection(&sec); }
41 CStdEvent(
bool fManualReset) { hEvent = CreateEvent(
nullptr, fManualReset,
false,
nullptr); }
48 void Set() { SetEvent(hEvent); }
49 void Pulse() { PulseEvent(hEvent); }
50 void Reset() { ResetEvent(hEvent); }
51 bool WaitFor(
int iMillis) {
return WaitForSingleObject(hEvent, iMillis) == WAIT_OBJECT_0; }
53 HANDLE GetEvent() {
return hEvent; }
58 #define INFINITE (~0u)
60 #if defined(HAVE_PTHREAD)
68 pthread_mutexattr_t attr;
69 pthread_mutexattr_init(&attr);
70 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
71 pthread_mutex_init(&mutex, &attr);
73 virtual ~CStdCSec() { pthread_mutex_destroy(&mutex); }
76 pthread_mutex_t mutex;
79 virtual void Enter() { pthread_mutex_lock(&mutex); }
80 virtual void Leave() { pthread_mutex_unlock(&mutex); }
86 CStdEvent(
bool fManualReset) : fManualReset(fManualReset), fSet(false)
88 pthread_cond_init(&cond,
nullptr);
89 pthread_mutex_init(&mutex,
nullptr);
93 pthread_cond_destroy(&cond);
94 pthread_mutex_destroy(&mutex);
99 pthread_mutex_t mutex;
100 bool fManualReset, fSet;
105 pthread_mutex_lock(&mutex);
107 pthread_cond_broadcast(&cond);
108 pthread_mutex_unlock(&mutex);
112 pthread_cond_broadcast(&cond);
116 pthread_mutex_lock(&mutex);
118 pthread_mutex_unlock(&mutex);
120 bool WaitFor(
unsigned int iMillis)
122 pthread_mutex_lock(&mutex);
128 timespec ts = {
static_cast<time_t
>(iMillis / 1000),
129 static_cast<long>((iMillis % 1000) * 1000000) };
130 if (0 != (iMillis !=
INFINITE ? pthread_cond_timedwait(&cond, &mutex, &ts) : pthread_cond_wait(&cond, &mutex)))
132 pthread_mutex_unlock(&mutex);
137 if (!fManualReset) fSet =
false;
138 pthread_mutex_unlock(&mutex);
285 #if defined(_DEBUG) && defined(_WIN32)
290 inline void Set() { idThread = ::GetCurrentThreadId(); }
291 inline void Check() { assert(idThread == ::GetCurrentThreadId()); }
virtual void OnShareFree(class CStdCSecEx *pCSec)=0
virtual ~CStdCSecExCallback()=default
CStdCSecExCallback * pCallbClass
~CStdCSecEx() override=default
CStdCSecEx(CStdCSecExCallback *pCallb)
CStdShareLock(CStdCSecEx *pSec)