21 INLINE ConditionVarWin32Impl::
22 ConditionVarWin32Impl(MutexWin32Impl &mutex) {
23 _external_mutex = &mutex._lock;
26 _event_signal = CreateEvent(NULL,
false,
false, NULL);
34 INLINE ConditionVarWin32Impl::
35 ~ConditionVarWin32Impl() {
36 CloseHandle(_event_signal);
44 INLINE
void ConditionVarWin32Impl::
46 LeaveCriticalSection(_external_mutex);
48 DWORD result = WaitForSingleObject(_event_signal, INFINITE);
49 nassertv(result == WAIT_OBJECT_0);
51 EnterCriticalSection(_external_mutex);
59 INLINE
void ConditionVarWin32Impl::
60 wait(
double timeout) {
61 LeaveCriticalSection(_external_mutex);
63 DWORD result = WaitForSingleObject(_event_signal, (DWORD)(timeout * 1000.0));
64 nassertv(result == WAIT_OBJECT_0 || result == WAIT_TIMEOUT);
66 EnterCriticalSection(_external_mutex);
74 INLINE
void ConditionVarWin32Impl::
76 SetEvent(_event_signal);