Go to the documentation of this file.
29 #ifndef COMPAT_W32PTHREADS_H
30 #define COMPAT_W32PTHREADS_H
38 #define WIN32_LEAN_AND_MEAN
51 void *(*func)(
void*
arg);
60 #define PTHREAD_MUTEX_INITIALIZER SRWLOCK_INIT
61 #define PTHREAD_COND_INITIALIZER CONDITION_VARIABLE_INIT
63 #define InitializeCriticalSection(x) InitializeCriticalSectionEx(x, 0, 0)
64 #define WaitForSingleObject(a, b) WaitForSingleObjectEx(a, b, FALSE)
66 #define PTHREAD_CANCEL_ENABLE 1
67 #define PTHREAD_CANCEL_DISABLE 0
72 h->ret =
h->func(
h->arg);
77 void *(*start_routine)(
void*),
void *
arg)
79 thread->
func = start_routine;
94 if (
ret != WAIT_OBJECT_0) {
95 if (
ret == WAIT_ABANDONED)
101 *value_ptr = thread.
ret;
102 CloseHandle(thread.
handle);
108 InitializeSRWLock(m);
118 AcquireSRWLockExclusive(m);
123 ReleaseSRWLockExclusive(m);
128 #define PTHREAD_ONCE_INIT INIT_ONCE_STATIC_INIT
132 BOOL pending = FALSE;
133 InitOnceBeginInitialize(once_control, 0, &pending,
NULL);
136 InitOnceComplete(once_control, 0,
NULL);
142 InitializeConditionVariable(
cond);
154 WakeAllConditionVariable(
cond);
160 SleepConditionVariableSRW(
cond,
mutex, INFINITE, 0);
165 const struct timespec *abstime)
167 int64_t abs_milli = abstime->tv_sec * 1000LL + abstime->tv_nsec / 1000000;
170 if (!SleepConditionVariableSRW(
cond,
mutex, t, 0)) {
171 DWORD err = GetLastError();
172 if (err == ERROR_TIMEOUT)
182 WakeConditionVariable(
cond);
static int pthread_mutex_lock(pthread_mutex_t *m)
static int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime)
static int pthread_cond_init(pthread_cond_t *cond, const void *unused_attr)
static int pthread_cond_broadcast(pthread_cond_t *cond)
static int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
static int pthread_cond_destroy(pthread_cond_t *cond)
static av_unused int pthread_once(pthread_once_t *once_control, void(*init_routine)(void))
static int pthread_mutex_destroy(pthread_mutex_t *m)
CONDITION_VARIABLE pthread_cond_t
void *(* func)(void *arg)
static av_unused int pthread_create(pthread_t *thread, const void *unused_attr, void *(*start_routine)(void *), void *arg)
static int pthread_cond_signal(pthread_cond_t *cond)
static av_unused int pthread_join(pthread_t thread, void **value_ptr)
static int pthread_setcancelstate(int state, int *oldstate)
static int pthread_mutex_init(pthread_mutex_t *m, void *attr)
#define INIT_ONCE(id, name)
int64_t av_gettime(void)
Get the current time in microseconds.
#define WaitForSingleObject(a, b)
static int pthread_mutex_unlock(pthread_mutex_t *m)
int(* cond)(enum AVPixelFormat pix_fmt)
static av_unused unsigned __stdcall attribute_align_arg win32thread_worker(void *arg)