= SDL_SemTryWait =
See if a semaphore has a positive value and decrement it if it does.
== Syntax ==
int SDL_SemTryWait(SDL_sem * sem);
== Function Parameters ==
{|
|'''sem'''
|the semaphore to wait on
|}
== Return Value ==
Returns 0 if the wait succeeds, [[SDL_MUTEX_TIMEDOUT]]
if the
wait would block, or a negative error code on failure; call
[[SDL_GetError]]() for more information.
== Remarks ==
This function checks to see if the semaphore pointed to by sem
has a positive value and atomically decrements the semaphore value if it
does. If the semaphore doesn't have a positive value, the function
immediately returns [[SDL_MUTEX_TIMEDOUT]].
== Version ==
This function is available since SDL 2.0.0.
== Code Examples ==
SDL_atomic_t done;
SDL_sem *sem;
SDL_AtomicSet(&done, 0);
sem = SDL_CreateSemaphore(0);
.
.
Thread A:
while (!SDL_AtomicGet(&done)) {
add_data_to_queue();
SDL_SemPost(sem);
}
Thread B:
while (!SDL_AtomicGet(&done)) {
if (SDL_SemTryWait(sem) == 0 && data_available()) {
get_data_from_queue();
}
... do other processing
}
.
.
SDL_AtomicSet(&done, 1);
SDL_SemPost(sem);
wait_for_threads();
SDL_DestroySemaphore(sem);
== Related Functions ==
:[[SDL_CreateSemaphore]]
:[[SDL_DestroySemaphore]]
:[[SDL_SemPost]]
:[[SDL_SemValue]]
:[[SDL_SemWait]]
:[[SDL_SemWaitTimeout]]
----
[[CategoryAPI]], [[CategoryMutex]]