SDL Wiki
(This is the documentation for SDL3, which is under heavy development and the API is changing! SDL2 is the current stable version!)

SDL_WaitSemaphoreTimeout

Wait until a semaphore has a positive value and then decrements it.

Header File

Defined in <SDL3/SDL_mutex.h>

Syntax

int SDL_WaitSemaphoreTimeout(SDL_Semaphore *sem, Sint32 timeoutMS);

Function Parameters

sem the semaphore to wait on
timeoutMS the length of the timeout, in milliseconds

Return Value

Returns 0 if the wait succeeds, SDL_MUTEX_TIMEDOUT if the wait does not succeed in the allotted time, or a negative error code on failure; call SDL_GetError() for more information.

Remarks

This function suspends the calling thread until either the semaphore pointed to by sem has a positive value, the call is interrupted by a signal or error, or the specified time has elapsed. If the call is successful it will atomically decrement the semaphore value.

Version

This function is available since SDL 3.0.0.

Code Examples

// BEWARE: This code example was migrated from the SDL2 Wiki, by only updating the names.

void add_data_to_queue(void);
void get_data_from_queue(void);
int data_available(void);
void wait_for_threads(void);

SDL_AtomicInt done;
SDL_Semaphore *sem;
SDL_AtomicSet(&done, 0);
sem = SDL_CreateSemaphore(0);

Thread_A:
    while (!SDL_AtomicGet(&done)) {
        add_data_to_queue();
        SDL_PostSemaphore(sem);
    }
Thread_B:
    const Uint32 timeout = 1000; /* wake up every second */
    while (!SDL_AtomicGet(&done)) {
        if (SDL_WaitSemaphoreTimeout(sem, timeout) == 0 && data_available()) {
            get_data_from_queue();
        }
        /* ... do other processing */
    }

SDL_AtomicSet(&done, 1);
SDL_PostSemaphore(sem);
wait_for_threads();
SDL_DestroySemaphore(sem);

See Also


CategoryAPI, CategoryAPIFunction


[ 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.