29 #ifndef AVCODEC_W32PTHREADS_H
30 #define AVCODEC_W32PTHREADS_H
38 #define WIN32_LEAN_AND_MEAN
44 void *(*func)(
void* arg);
75 void *(*start_routine)(
void*),
void *arg)
77 thread->
func = start_routine;
86 DWORD ret = WaitForSingleObject(thread.
handle, INFINITE);
87 if (ret != WAIT_OBJECT_0)
90 *value_ptr = thread.
ret;
91 CloseHandle(thread.
handle);
96 InitializeCriticalSection(m);
101 DeleteCriticalSection(m);
106 EnterCriticalSection(m);
111 LeaveCriticalSection(m);
138 cond->
ptr = win32_cond;
171 if (cond_broadcast) {
172 cond_broadcast(cond);
189 WaitForSingleObject(win32_cond->
waiters_done, INFINITE);
202 cond_wait(cond, mutex, INFINITE);
215 WaitForSingleObject(win32_cond->
semaphore, INFINITE);
247 WaitForSingleObject(win32_cond->
waiters_done, INFINITE);
256 HANDLE kernel_dll = GetModuleHandle(TEXT(
"kernel32.dll"));
259 (
void*)GetProcAddress(kernel_dll,
"InitializeConditionVariable");
261 (
void*)GetProcAddress(kernel_dll,
"WakeAllConditionVariable");
263 (
void*)GetProcAddress(kernel_dll,
"WakeConditionVariable");
265 (
void*)GetProcAddress(kernel_dll,
"SleepConditionVariableCS");