Annotation of sbbs/include/sdl/sdl_mutex.h, revision 1.1.1.1

1.1       root        1: /*
                      2:     SDL - Simple DirectMedia Layer
                      3:     Copyright (C) 1997-2004 Sam Lantinga
                      4: 
                      5:     This library is free software; you can redistribute it and/or
                      6:     modify it under the terms of the GNU Library General Public
                      7:     License as published by the Free Software Foundation; either
                      8:     version 2 of the License, or (at your option) any later version.
                      9: 
                     10:     This library is distributed in the hope that it will be useful,
                     11:     but WITHOUT ANY WARRANTY; without even the implied warranty of
                     12:     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
                     13:     Library General Public License for more details.
                     14: 
                     15:     You should have received a copy of the GNU Library General Public
                     16:     License along with this library; if not, write to the Free
                     17:     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
                     18: 
                     19:     Sam Lantinga
                     20:     [email protected]
                     21: */
                     22: 
                     23: #ifdef SAVE_RCSID
                     24: static char rcsid =
                     25:  "@(#) $Id: SDL_mutex.h,v 1.1.1.1 2005/11/18 23:23:29 rswindell Exp $";
                     26: #endif
                     27: 
                     28: #ifndef _SDL_mutex_h
                     29: #define _SDL_mutex_h
                     30: 
                     31: /* Functions to provide thread synchronization primitives
                     32: 
                     33:        These are independent of the other SDL routines.
                     34: */
                     35: 
                     36: #include "SDL_main.h"
                     37: #include "SDL_types.h"
                     38: 
                     39: #include "begin_code.h"
                     40: /* Set up for C function definitions, even when using C++ */
                     41: #ifdef __cplusplus
                     42: extern "C" {
                     43: #endif
                     44: 
                     45: /* Synchronization functions which can time out return this value
                     46:    if they time out.
                     47: */
                     48: #define SDL_MUTEX_TIMEDOUT     1
                     49: 
                     50: /* This is the timeout value which corresponds to never time out */
                     51: #define SDL_MUTEX_MAXWAIT      (~(Uint32)0)
                     52: 
                     53: 
                     54: /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
                     55: /* Mutex functions                                               */
                     56: /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
                     57: 
                     58: /* The SDL mutex structure, defined in SDL_mutex.c */
                     59: struct SDL_mutex;
                     60: typedef struct SDL_mutex SDL_mutex;
                     61: 
                     62: /* Create a mutex, initialized unlocked */
                     63: extern DECLSPEC SDL_mutex * SDLCALL SDL_CreateMutex(void);
                     64: 
                     65: /* Lock the mutex  (Returns 0, or -1 on error) */
                     66: #define SDL_LockMutex(m)       SDL_mutexP(m)
                     67: extern DECLSPEC int SDLCALL SDL_mutexP(SDL_mutex *mutex);
                     68: 
                     69: /* Unlock the mutex  (Returns 0, or -1 on error)
                     70:    It is an error to unlock a mutex that has not been locked by
                     71:    the current thread, and doing so results in undefined behavior.
                     72:  */
                     73: #define SDL_UnlockMutex(m)     SDL_mutexV(m)
                     74: extern DECLSPEC int SDLCALL SDL_mutexV(SDL_mutex *mutex);
                     75: 
                     76: /* Destroy a mutex */
                     77: extern DECLSPEC void SDLCALL SDL_DestroyMutex(SDL_mutex *mutex);
                     78: 
                     79: 
                     80: /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
                     81: /* Semaphore functions                                           */
                     82: /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
                     83: 
                     84: /* The SDL semaphore structure, defined in SDL_sem.c */
                     85: struct SDL_semaphore;
                     86: typedef struct SDL_semaphore SDL_sem;
                     87: 
                     88: /* Create a semaphore, initialized with value, returns NULL on failure. */
                     89: extern DECLSPEC SDL_sem * SDLCALL SDL_CreateSemaphore(Uint32 initial_value);
                     90: 
                     91: /* Destroy a semaphore */
                     92: extern DECLSPEC void SDLCALL SDL_DestroySemaphore(SDL_sem *sem);
                     93: 
                     94: /* This function suspends the calling thread until the semaphore pointed 
                     95:  * to by sem has a positive count. It then atomically decreases the semaphore
                     96:  * count.
                     97:  */
                     98: extern DECLSPEC int SDLCALL SDL_SemWait(SDL_sem *sem);
                     99: 
                    100: /* Non-blocking variant of SDL_SemWait(), returns 0 if the wait succeeds,
                    101:    SDL_MUTEX_TIMEDOUT if the wait would block, and -1 on error.
                    102: */
                    103: extern DECLSPEC int SDLCALL SDL_SemTryWait(SDL_sem *sem);
                    104: 
                    105: /* Variant of SDL_SemWait() with a timeout in milliseconds, returns 0 if
                    106:    the wait succeeds, SDL_MUTEX_TIMEDOUT if the wait does not succeed in
                    107:    the allotted time, and -1 on error.
                    108:    On some platforms this function is implemented by looping with a delay
                    109:    of 1 ms, and so should be avoided if possible.
                    110: */
                    111: extern DECLSPEC int SDLCALL SDL_SemWaitTimeout(SDL_sem *sem, Uint32 ms);
                    112: 
                    113: /* Atomically increases the semaphore's count (not blocking), returns 0,
                    114:    or -1 on error.
                    115:  */
                    116: extern DECLSPEC int SDLCALL SDL_SemPost(SDL_sem *sem);
                    117: 
                    118: /* Returns the current count of the semaphore */
                    119: extern DECLSPEC Uint32 SDLCALL SDL_SemValue(SDL_sem *sem);
                    120: 
                    121: 
                    122: /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
                    123: /* Condition variable functions                                  */
                    124: /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
                    125: 
                    126: /* The SDL condition variable structure, defined in SDL_cond.c */
                    127: struct SDL_cond;
                    128: typedef struct SDL_cond SDL_cond;
                    129: 
                    130: /* Create a condition variable */
                    131: extern DECLSPEC SDL_cond * SDLCALL SDL_CreateCond(void);
                    132: 
                    133: /* Destroy a condition variable */
                    134: extern DECLSPEC void SDLCALL SDL_DestroyCond(SDL_cond *cond);
                    135: 
                    136: /* Restart one of the threads that are waiting on the condition variable,
                    137:    returns 0 or -1 on error.
                    138:  */
                    139: extern DECLSPEC int SDLCALL SDL_CondSignal(SDL_cond *cond);
                    140: 
                    141: /* Restart all threads that are waiting on the condition variable,
                    142:    returns 0 or -1 on error.
                    143:  */
                    144: extern DECLSPEC int SDLCALL SDL_CondBroadcast(SDL_cond *cond);
                    145: 
                    146: /* Wait on the condition variable, unlocking the provided mutex.
                    147:    The mutex must be locked before entering this function!
                    148:    Returns 0 when it is signaled, or -1 on error.
                    149:  */
                    150: extern DECLSPEC int SDLCALL SDL_CondWait(SDL_cond *cond, SDL_mutex *mut);
                    151: 
                    152: /* Waits for at most 'ms' milliseconds, and returns 0 if the condition
                    153:    variable is signaled, SDL_MUTEX_TIMEDOUT if the condition is not
                    154:    signaled in the allotted time, and -1 on error.
                    155:    On some platforms this function is implemented by looping with a delay
                    156:    of 1 ms, and so should be avoided if possible.
                    157: */
                    158: extern DECLSPEC int SDLCALL SDL_CondWaitTimeout(SDL_cond *cond, SDL_mutex *mutex, Uint32 ms);
                    159: 
                    160: /* Ends C function definitions when using C++ */
                    161: #ifdef __cplusplus
                    162: }
                    163: #endif
                    164: #include "close_code.h"
                    165: 
                    166: #endif /* _SDL_mutex_h */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.