1<HTML 2><HEAD 3><TITLE 4>SDL_SemWaitTimeout</TITLE 5><META 6NAME="GENERATOR" 7CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+ 8"><LINK 9REL="HOME" 10TITLE="SDL Library Documentation" 11HREF="index.html"><LINK 12REL="UP" 13TITLE="Multi-threaded Programming" 14HREF="thread.html"><LINK 15REL="PREVIOUS" 16TITLE="SDL_SemTryWait" 17HREF="sdlsemtrywait.html"><LINK 18REL="NEXT" 19TITLE="SDL_SemPost" 20HREF="sdlsempost.html"></HEAD 21><BODY 22CLASS="REFENTRY" 23BGCOLOR="#FFF8DC" 24TEXT="#000000" 25LINK="#0000ee" 26VLINK="#551a8b" 27ALINK="#ff0000" 28><DIV 29CLASS="NAVHEADER" 30><TABLE 31SUMMARY="Header navigation table" 32WIDTH="100%" 33BORDER="0" 34CELLPADDING="0" 35CELLSPACING="0" 36><TR 37><TH 38COLSPAN="3" 39ALIGN="center" 40>SDL Library Documentation</TH 41></TR 42><TR 43><TD 44WIDTH="10%" 45ALIGN="left" 46VALIGN="bottom" 47><A 48HREF="sdlsemtrywait.html" 49ACCESSKEY="P" 50>Prev</A 51></TD 52><TD 53WIDTH="80%" 54ALIGN="center" 55VALIGN="bottom" 56></TD 57><TD 58WIDTH="10%" 59ALIGN="right" 60VALIGN="bottom" 61><A 62HREF="sdlsempost.html" 63ACCESSKEY="N" 64>Next</A 65></TD 66></TR 67></TABLE 68><HR 69ALIGN="LEFT" 70WIDTH="100%"></DIV 71><H1 72><A 73NAME="SDLSEMWAITTIMEOUT" 74></A 75>SDL_SemWaitTimeout</H1 76><DIV 77CLASS="REFNAMEDIV" 78><A 79NAME="AEN8120" 80></A 81><H2 82>Name</H2 83>SDL_SemWaitTimeout -- Lock a semaphore, but only wait up to a specified maximum time.</DIV 84><DIV 85CLASS="REFSYNOPSISDIV" 86><A 87NAME="AEN8123" 88></A 89><H2 90>Synopsis</H2 91><DIV 92CLASS="FUNCSYNOPSIS" 93><A 94NAME="AEN8124" 95></A 96><P 97></P 98><PRE 99CLASS="FUNCSYNOPSISINFO" 100>#include "SDL.h" 101#include "SDL_thread.h"</PRE 102><P 103><CODE 104><CODE 105CLASS="FUNCDEF" 106>int <B 107CLASS="FSFUNC" 108>SDL_SemWaitTimeout</B 109></CODE 110>(SDL_sem *sem, Uint32 timeout);</CODE 111></P 112><P 113></P 114></DIV 115></DIV 116><DIV 117CLASS="REFSECT1" 118><A 119NAME="AEN8130" 120></A 121><H2 122>Description</H2 123><P 124><TT 125CLASS="FUNCTION" 126>SDL_SemWaitTimeout()</TT 127> is a varient of 128<A 129HREF="sdlsemwait.html" 130>SDL_SemWait</A 131> 132with a maximum timeout value. 133If the value of the semaphore pointed to by <TT 134CLASS="PARAMETER" 135><I 136>sem</I 137></TT 138> is 139positive (greater than zero) it will atomically decrement the semaphore value 140and return 0, otherwise it will wait up to <TT 141CLASS="PARAMETER" 142><I 143>timeout</I 144></TT 145> 146milliseconds trying to lock the semaphore. This function is to be avoided if 147possible since on some platforms it is implemented by polling the semaphore 148every millisecond in a busy loop.</P 149><P 150>After <TT 151CLASS="FUNCTION" 152>SDL_SemWaitTimeout()</TT 153> is successful, the semaphore 154can be released and its count atomically incremented by a successful call to 155<A 156HREF="sdlsempost.html" 157>SDL_SemPost</A 158>.</P 159></DIV 160><DIV 161CLASS="REFSECT1" 162><A 163NAME="AEN8140" 164></A 165><H2 166>Return Value</H2 167><P 168>Returns <SPAN 169CLASS="RETURNVALUE" 170>0</SPAN 171> if the semaphore was successfully locked or 172either <SPAN 173CLASS="RETURNVALUE" 174>SDL_MUTEX_TIMEDOUT</SPAN 175> or <SPAN 176CLASS="RETURNVALUE" 177>-1</SPAN 178> 179if the timeout period was exceeded or there was an error, respectivly.</P 180><P 181>If the semaphore was not successfully locked, the semaphore will be unchanged.</P 182></DIV 183><DIV 184CLASS="REFSECT1" 185><A 186NAME="AEN8147" 187></A 188><H2 189>Examples</H2 190><P 191><PRE 192CLASS="PROGRAMLISTING" 193>res = SDL_SemWaitTimeout(my_sem, WAIT_TIMEOUT_MILLISEC); 194 195if (res == SDL_MUTEX_TIMEDOUT) { 196 return TRY_AGAIN; 197} 198if (res == -1) { 199 return WAIT_ERROR; 200} 201 202... 203 204SDL_SemPost(my_sem);</PRE 205></P 206></DIV 207><DIV 208CLASS="REFSECT1" 209><A 210NAME="AEN8151" 211></A 212><H2 213>See Also</H2 214><P 215><A 216HREF="sdlcreatesemaphore.html" 217><TT 218CLASS="FUNCTION" 219>SDL_CreateSemaphore</TT 220></A 221>, 222<A 223HREF="sdldestroysemaphore.html" 224><TT 225CLASS="FUNCTION" 226>SDL_DestroySemaphore</TT 227></A 228>, 229<A 230HREF="sdlsemwait.html" 231><TT 232CLASS="FUNCTION" 233>SDL_SemWait</TT 234></A 235>, 236<A 237HREF="sdlsemtrywait.html" 238><TT 239CLASS="FUNCTION" 240>SDL_SemTryWait</TT 241></A 242>, 243<A 244HREF="sdlsempost.html" 245><TT 246CLASS="FUNCTION" 247>SDL_SemPost</TT 248></A 249>, 250<A 251HREF="sdlsemvalue.html" 252><TT 253CLASS="FUNCTION" 254>SDL_SemValue</TT 255></A 256></P 257></DIV 258><DIV 259CLASS="NAVFOOTER" 260><HR 261ALIGN="LEFT" 262WIDTH="100%"><TABLE 263SUMMARY="Footer navigation table" 264WIDTH="100%" 265BORDER="0" 266CELLPADDING="0" 267CELLSPACING="0" 268><TR 269><TD 270WIDTH="33%" 271ALIGN="left" 272VALIGN="top" 273><A 274HREF="sdlsemtrywait.html" 275ACCESSKEY="P" 276>Prev</A 277></TD 278><TD 279WIDTH="34%" 280ALIGN="center" 281VALIGN="top" 282><A 283HREF="index.html" 284ACCESSKEY="H" 285>Home</A 286></TD 287><TD 288WIDTH="33%" 289ALIGN="right" 290VALIGN="top" 291><A 292HREF="sdlsempost.html" 293ACCESSKEY="N" 294>Next</A 295></TD 296></TR 297><TR 298><TD 299WIDTH="33%" 300ALIGN="left" 301VALIGN="top" 302>SDL_SemTryWait</TD 303><TD 304WIDTH="34%" 305ALIGN="center" 306VALIGN="top" 307><A 308HREF="thread.html" 309ACCESSKEY="U" 310>Up</A 311></TD 312><TD 313WIDTH="33%" 314ALIGN="right" 315VALIGN="top" 316>SDL_SemPost</TD 317></TR 318></TABLE 319></DIV 320></BODY 321></HTML 322>