3 * @author aurelien.morelle@parrot.fr
7 #include "VP_Os/vp_os_signal.h"
9 #if defined USE_WINDOWS_CONDITION_VARIABLES
10 #elif defined USE_PTHREAD_FOR_WIN32
15 vp_os_mutex_init(vp_os_mutex_t *mutex)
17 #if defined USE_WINDOWS_CONDITION_VARIABLES
18 InitializeCriticalSection((CRITICAL_SECTION *)mutex);
19 #elif defined USE_PTHREAD_FOR_WIN32
20 pthread_mutex_init((pthread_mutex_t *)mutex, NULL);
27 vp_os_mutex_destroy(vp_os_mutex_t *mutex)
29 #if defined USE_WINDOWS_CONDITION_VARIABLES
30 DeleteCriticalSection((CRITICAL_SECTION *)mutex);
31 #elif defined USE_PTHREAD_FOR_WIN32
32 pthread_mutex_destroy((pthread_mutex_t *)mutex);
39 vp_os_mutex_lock(vp_os_mutex_t *mutex)
41 #if defined USE_WINDOWS_CONDITION_VARIABLES
42 EnterCriticalSection((CRITICAL_SECTION *)mutex);
43 #elif defined USE_PTHREAD_FOR_WIN32
44 pthread_mutex_lock((pthread_mutex_t *)mutex);
51 vp_os_mutex_unlock(vp_os_mutex_t *mutex)
53 #if defined USE_WINDOWS_CONDITION_VARIABLES
54 LeaveCriticalSection((CRITICAL_SECTION *)mutex);
55 #elif defined USE_PTHREAD_FOR_WIN32
56 pthread_mutex_unlock((pthread_mutex_t *)mutex);
64 vp_os_cond_init(vp_os_cond_t *cond, vp_os_mutex_t *mutex)
66 #if defined USE_WINDOWS_CONDITION_VARIABLES
67 InitializeConditionVariable(&cond->cond);
69 #elif defined USE_PTHREAD_FOR_WIN32
70 pthread_cond_init(&cond->cond, NULL);
79 vp_os_cond_destroy(vp_os_cond_t *cond)
81 #if defined USE_WINDOWS_CONDITION_VARIABLES
83 #elif defined USE_PTHREAD_FOR_WIN32
84 pthread_cond_destroy(&cond->cond);
93 vp_os_cond_wait(vp_os_cond_t *cond)
95 #if defined USE_WINDOWS_CONDITION_VARIABLES
96 SleepConditionVariableCS(&cond->cond, (CRITICAL_SECTION *)cond->mutex, INFINITE);
97 #elif defined USE_PTHREAD_FOR_WIN32
98 pthread_cond_wait(&cond->cond, (pthread_mutex_t *)cond->mutex);
100 WaitForSingleObject(cond->LockSemaphore,INFINITE); // TODO: to test
105 int gettimeofday(struct timeval *tv, struct timezone *tz);
108 vp_os_cond_timed_wait(vp_os_cond_t *cond, uint32_t ms)
110 #if defined USE_WINDOWS_CONDITION_VARIABLES
111 return SleepConditionVariableCS(&cond->cond, (CRITICAL_SECTION *)cond->mutex, ms) == WAIT_TIMEOUT ? VP_FAILURE : VP_SUCCESS;
112 #elif defined USE_PTHREAD_FOR_WIN32
115 gettimeofday(&tv, NULL);
116 ts.tv_sec = tv.tv_sec + ms/1000;
117 ts.tv_nsec = (tv.tv_usec + (ms%1000))*1000;
118 return ( pthread_cond_timedwait(&cond->cond, (pthread_mutex_t *)cond->mutex, &ts) == ETIMEDOUT ? VP_FAILURE : VP_SUCCESS );
120 return WaitForSingleObject(cond->LockSemaphore, ms) == WAIT_TIMEOUT ? VP_FAILURE : VP_SUCCESS; // TODO: to test
125 vp_os_cond_signal(vp_os_cond_t *cond)
127 #if defined USE_WINDOWS_CONDITION_VARIABLES
128 WakeConditionVariable(&cond->cond);
129 #elif defined USE_PTHREAD_FOR_WIN32
130 pthread_cond_signal(&cond->cond);
136 vp_os_cond_broadcast(vp_os_cond_t *cond)
138 #if defined USE_WINDOWS_CONDITION_VARIABLES
140 #elif defined USE_PTHREAD_FOR_WIN32
141 pthread_cond_broadcast(&cond->cond);