---
name: "SDL_SemWaitTimeout"
section: "3"
platform: "linux"
package: "libsdl1.2-dev"
version: "1.2.15+dfsg2-8"
release: "Debian 12 (Bookworm)"
platforms: ["linux"]
url: "https://new.carta.tech/SDL_SemWaitTimeout"
---

# SDL\_SemWaitTimeout(3)

Lock a semaphore, but only wait up to a specified maximum time.

## NAME

SDL\_SemWaitTimeout - Lock a semaphore, but only wait up to a specified maximum time.

## SYNOPSIS

**#include "SDL.h"** **#include "SDL\_thread.h"**

**int SDL\_SemWaitTimeout**(**SDL\_sem \*sem, Uint32 timeout**);

## DESCRIPTION

**SDL\_SemWaitTimeout()** is a varient of *SDL\_SemWait* with a maximum timeout value. If the value of the semaphore pointed to by **sem** is positive (greater than zero) it will atomically decrement the semaphore value and return 0, otherwise it will wait up to **timeout** milliseconds trying to lock the semaphore. This function is to be avoided if possible since on some platforms it is implemented by polling the semaphore every millisecond in a busy loop.

After **SDL\_SemWaitTimeout()** is successful, the semaphore can be released and its count atomically incremented by a successful call to *SDL\_SemPost*.

## RETURN VALUE

Returns **0** if the semaphore was successfully locked or either **SDL\_MUTEX\_TIMEOUT** or **-1** if the timeout period was exceeded or there was an error, respectivly.

If the semaphore was not successfully locked, the semaphore will be unchanged.

## EXAMPLES

```
res = SDL_SemWaitTimeout(my_sem, WAIT_TIMEOUT_MILLISEC);
if (res == SDL_MUTEX_TIMEOUT) {
        return TRY_AGAIN;
}
if (res == -1) {
        return WAIT_ERROR;
}
...
SDL_SemPost(my_sem);
```

## SEE ALSO

**SDL\_CreateSemaphore**, **SDL\_DestroySemaphore**, **SDL\_SemWait**, **SDL\_SemTryWait**, **SDL\_SemPost**, **SDL\_SemValue**
