Wait until a condition variable is signaled or a certain time has passed.
int SDL_CondWaitTimeout(SDL_cond * cond,
SDL_mutex * mutex, Uint32 ms);
cond |
the condition variable to wait on |
mutex |
the mutex used to coordinate thread access |
ms |
the maximum time to wait, in milliseconds, or |
Returns 0 if the condition variable is signaled, SDL_MUTEX_TIMEDOUT
if the condition is not signaled in the allotted time, or a negative error code on failure; call SDL_GetError() for more information.
This function unlocks the specified mutex
and waits for another thread to call SDL_CondSignal() or SDL_CondBroadcast() on the condition variable cond
, or for the specified time to elapse. Once the condition variable is signaled or the time elapsed, the mutex is re-locked and the function returns.
The mutex must be locked before calling this function.
This function is available since SDL 2.0.0.
SDL_bool condition = SDL_FALSE;
SDL_mutex *lock;
SDL_cond *cond;
lock = SDL_CreateMutex();
cond = SDL_CreateCond();
.
.
Thread A:const Uint32 timeout = 1000; /* wake up every second */
while (!done) {
SDL_LockMutex(lock);while (!condition && SDL_CondWaitTimeout(cond, lock, timeout) == 0) {
continue;
}
SDL_UnlockMutex(lock);
if (condition) {
...
}
do some periodic work
...
}
Thread B:
SDL_LockMutex(lock);
...
condition = SDL_TRUE;
...
SDL_CondSignal(cond);
SDL_UnlockMutex(lock);
.
.
SDL_DestroyCond(cond); SDL_DestroyMutex(lock);