SDL_SemWait() 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. If the call is successful it will atomically decrement the semaphore value.
After SDL_SemWait() is successful, the semaphore can be released and its count atomically incremented by a successful call to SDL_SemPost.
if ( SDL_SemWait( my_sem ) = -1) then
begin
Result := WAIT_FAILED;
end;
.
.
.
.
SDL_SemPost( my_sem );