This is new wiki software and old wiki content. It's a work in progress!
Here's the explanation.
Be gentle, report bugs, leave feedback on pages, or just edit them yourself! Thanks!

SDL Wiki

SDL_CondWaitTimeout

Wait until a condition variable is signaled or a certain time has passed.

Syntax

int SDL_CondWaitTimeout(SDL_cond * cond,
                        SDL_mutex * mutex, Uint32 ms);

Function Parameters

cond

the condition variable to wait on

mutex

the mutex used to coordinate thread access

ms

the maximum time to wait, in milliseconds, or SDL_MUTEX_MAXWAIT to wait indefinitely

Return Value

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.

Remarks

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.

Code Examples

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);
SDL_CondBroadcast
SDL_CondSignal
SDL_CondWait
SDL_CreateCond
SDL_DestroyCond

CategoryAPI, CategoryMutex


[ edit | delete | history | feedback | raw ]

[ front page | index | search | recent changes | git repo | offline html ]

All wiki content is licensed under Creative Commons Attribution 4.0 International (CC BY 4.0).
Wiki powered by ghwikipp.