29 #ifndef LIBAV_COMPAT_W32PTHREADS_H
30 #define LIBAV_COMPAT_W32PTHREADS_H
38 #define WIN32_LEAN_AND_MEAN
47 void *(*func)(
void*
arg);
64 #if _WIN32_WINNT < 0x0600
71 #define cond_init InitializeConditionVariable
72 #define cond_broadcast WakeAllConditionVariable
73 #define cond_signal WakeConditionVariable
74 #define cond_wait SleepConditionVariableCS
85 void *(*start_routine)(
void*),
void *arg)
87 thread->
func = start_routine;
96 DWORD ret = WaitForSingleObject(thread.
handle, INFINITE);
97 if (ret != WAIT_OBJECT_0)
100 *value_ptr = thread.
ret;
101 CloseHandle(thread.
handle);
106 InitializeCriticalSection(m);
111 DeleteCriticalSection(m);
116 EnterCriticalSection(m);
121 LeaveCriticalSection(m);
148 cond->
ptr = win32_cond;
181 if (cond_broadcast) {
182 cond_broadcast(cond);
199 WaitForSingleObject(win32_cond->
waiters_done, INFINITE);
212 cond_wait(cond, mutex, INFINITE);
225 WaitForSingleObject(win32_cond->
semaphore, INFINITE);
257 WaitForSingleObject(win32_cond->
waiters_done, INFINITE);
266 #if _WIN32_WINNT < 0x0600
267 HANDLE kernel_dll = GetModuleHandle(TEXT(
"kernel32.dll"));