Annotation of sbbs/include/sdl/sdl_thread.h, revision 1.1.1.2

1.1       root        1: /*
                      2:     SDL - Simple DirectMedia Layer
1.1.1.2 ! root        3:     Copyright (C) 1997-2006 Sam Lantinga
1.1       root        4: 
                      5:     This library is free software; you can redistribute it and/or
1.1.1.2 ! root        6:     modify it under the terms of the GNU Lesser General Public
1.1       root        7:     License as published by the Free Software Foundation; either
1.1.1.2 ! root        8:     version 2.1 of the License, or (at your option) any later version.
1.1       root        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
1.1.1.2 ! root       13:     Lesser General Public License for more details.
1.1       root       14: 
1.1.1.2 ! root       15:     You should have received a copy of the GNU Lesser General Public
        !            16:     License along with this library; if not, write to the Free Software
        !            17:     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
1.1       root       18: 
                     19:     Sam Lantinga
                     20:     [email protected]
                     21: */
                     22: 
                     23: #ifndef _SDL_thread_h
                     24: #define _SDL_thread_h
                     25: 
                     26: /* Header for the SDL thread management routines 
                     27: 
                     28:        These are independent of the other SDL routines.
                     29: */
                     30: 
1.1.1.2 ! root       31: #include "SDL_stdinc.h"
        !            32: #include "SDL_error.h"
1.1       root       33: 
                     34: /* Thread synchronization primitives */
                     35: #include "SDL_mutex.h"
                     36: 
                     37: #include "begin_code.h"
                     38: /* Set up for C function definitions, even when using C++ */
                     39: #ifdef __cplusplus
                     40: extern "C" {
                     41: #endif
                     42: 
                     43: /* The SDL thread structure, defined in SDL_thread.c */
                     44: struct SDL_Thread;
                     45: typedef struct SDL_Thread SDL_Thread;
                     46: 
                     47: /* Create a thread */
1.1.1.2 ! root       48: #if ((defined(__WIN32__) && !defined(HAVE_LIBC)) || defined(__OS2__)) &&  !defined(__SYMBIAN32__)
        !            49: /*
        !            50:    We compile SDL into a DLL on OS/2. This means, that it's the DLL which
        !            51:    creates a new thread for the calling process with the SDL_CreateThread()
        !            52:    API. There is a problem with this, that only the RTL of the SDL.DLL will
        !            53:    be initialized for those threads, and not the RTL of the calling application!
        !            54:    To solve this, we make a little hack here.
        !            55:    We'll always use the caller's _beginthread() and _endthread() APIs to
        !            56:    start a new thread. This way, if it's the SDL.DLL which uses this API,
        !            57:    then the RTL of SDL.DLL will be used to create the new thread, and if it's
        !            58:    the application, then the RTL of the application will be used.
        !            59:    So, in short:
        !            60:    Always use the _beginthread() and _endthread() of the calling runtime library!
        !            61: */
        !            62: #define SDL_PASSED_BEGINTHREAD_ENDTHREAD
        !            63: #ifndef _WIN32_WCE
        !            64: #include <process.h> /* This has _beginthread() and _endthread() defined! */
        !            65: #endif
        !            66: 
        !            67: #ifdef __OS2__
        !            68: typedef int (*pfnSDL_CurrentBeginThread)(void (*func)(void *), void *, unsigned, void *arg); 
        !            69: typedef void (*pfnSDL_CurrentEndThread)(void);
        !            70: #elif __GNUC__
        !            71: typedef unsigned long (__cdecl *pfnSDL_CurrentBeginThread) (void *, unsigned,
        !            72:         unsigned (__stdcall *func)(void *), void *arg, 
        !            73:         unsigned, unsigned *threadID);
        !            74: typedef void (__cdecl *pfnSDL_CurrentEndThread)(unsigned code);
        !            75: #else
        !            76: typedef uintptr_t (__cdecl *pfnSDL_CurrentBeginThread) (void *, unsigned,
        !            77:         unsigned (__stdcall *func)(void *), void *arg, 
        !            78:         unsigned, unsigned *threadID);
        !            79: typedef void (__cdecl *pfnSDL_CurrentEndThread)(unsigned code);
        !            80: #endif
        !            81: 
        !            82: extern DECLSPEC SDL_Thread * SDLCALL SDL_CreateThread(int (SDLCALL *fn)(void *), void *data, pfnSDL_CurrentBeginThread pfnBeginThread, pfnSDL_CurrentEndThread pfnEndThread);
        !            83: 
        !            84: #ifdef __OS2__
        !            85: #define SDL_CreateThread(fn, data) SDL_CreateThread(fn, data, _beginthread, _endthread)
        !            86: #elif defined(_WIN32_WCE)
        !            87: #define SDL_CreateThread(fn, data) SDL_CreateThread(fn, data, NULL, NULL)
        !            88: #else
        !            89: #define SDL_CreateThread(fn, data) SDL_CreateThread(fn, data, _beginthreadex, _endthreadex)
        !            90: #endif
        !            91: #else
1.1       root       92: extern DECLSPEC SDL_Thread * SDLCALL SDL_CreateThread(int (SDLCALL *fn)(void *), void *data);
1.1.1.2 ! root       93: #endif
1.1       root       94: 
                     95: /* Get the 32-bit thread identifier for the current thread */
                     96: extern DECLSPEC Uint32 SDLCALL SDL_ThreadID(void);
                     97: 
                     98: /* Get the 32-bit thread identifier for the specified thread,
                     99:    equivalent to SDL_ThreadID() if the specified thread is NULL.
                    100:  */
                    101: extern DECLSPEC Uint32 SDLCALL SDL_GetThreadID(SDL_Thread *thread);
                    102: 
                    103: /* Wait for a thread to finish.
                    104:    The return code for the thread function is placed in the area
                    105:    pointed to by 'status', if 'status' is not NULL.
                    106:  */
                    107: extern DECLSPEC void SDLCALL SDL_WaitThread(SDL_Thread *thread, int *status);
                    108: 
                    109: /* Forcefully kill a thread without worrying about its state */
                    110: extern DECLSPEC void SDLCALL SDL_KillThread(SDL_Thread *thread);
                    111: 
                    112: 
                    113: /* Ends C function definitions when using C++ */
                    114: #ifdef __cplusplus
                    115: }
                    116: #endif
                    117: #include "close_code.h"
                    118: 
                    119: #endif /* _SDL_thread_h */

unix.superglobalmegacorp.com

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