Mercurial > sdl-ios-xcode
annotate include/SDL_thread.h @ 3957:b1d5b56aa549 SDL-1.2
Date: Mon, 4 Jun 2007 06:17:59 +0000 (UTC)
From: George Gensure <werkt0@gmail.com>
Subject: [SDL] error removal patch for SDL_x11dyn.c
I found that calling SDL_GetError when an error hasn't necessarily occurred is
still reporting problems from loadso regarding dynamic functions in X11. I've
added the following to my local copy to avoid revealing the 'many library
lookup' approach adopted by x11dyn.c:
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Wed, 13 Jun 2007 07:54:10 +0000 |
parents | d5d3a6fe05a1 |
children | c121d94672cb e85e65aec22f |
rev | line source |
---|---|
0 | 1 /* |
2 SDL - Simple DirectMedia Layer | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1190
diff
changeset
|
3 Copyright (C) 1997-2006 Sam Lantinga |
0 | 4 |
5 This library is free software; you can redistribute it and/or | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1190
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
0 | 7 License as published by the Free Software Foundation; either |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1190
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
0 | 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 | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1190
diff
changeset
|
13 Lesser General Public License for more details. |
0 | 14 |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1190
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1190
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1190
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
0 | 18 |
19 Sam Lantinga | |
251
b8688cfdc232
Updated the headers with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
20 slouken@libsdl.org |
0 | 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 | |
1356
67114343400d
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
31 #include "SDL_stdinc.h" |
1358
c71e05b4dc2e
More header massaging... works great on Windows. ;-)
Sam Lantinga <slouken@libsdl.org>
parents:
1356
diff
changeset
|
32 #include "SDL_error.h" |
0 | 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 */ | |
1471
9fb0eee04dd9
Enabled libc support on Win32, so we don't break binary compatibility in 1.2
Sam Lantinga <slouken@libsdl.org>
parents:
1470
diff
changeset
|
48 #if (defined(__WIN32__) && !defined(HAVE_LIBC)) || defined(__OS2__) |
1190 | 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 | |
1330
450721ad5436
It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
56 start a new thread. This way, if it's the SDL.DLL which uses this API, |
1190 | 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 */ | |
1471
9fb0eee04dd9
Enabled libc support on Win32, so we don't break binary compatibility in 1.2
Sam Lantinga <slouken@libsdl.org>
parents:
1470
diff
changeset
|
62 #define SDL_PASSED_BEGINTHREAD_ENDTHREAD |
1465
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1442
diff
changeset
|
63 #ifndef _WIN32_WCE |
1471
9fb0eee04dd9
Enabled libc support on Win32, so we don't break binary compatibility in 1.2
Sam Lantinga <slouken@libsdl.org>
parents:
1470
diff
changeset
|
64 #include <process.h> /* This has _beginthread() and _endthread() defined! */ |
1190 | 65 #endif |
66 | |
1330
450721ad5436
It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
67 #ifdef __OS2__ |
1442
e3242177fe4a
Updated OS/2 build, yay!
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
68 typedef int (*pfnSDL_CurrentBeginThread)(void (*func)(void *), void *, unsigned, void *arg); |
e3242177fe4a
Updated OS/2 build, yay!
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
69 typedef void (*pfnSDL_CurrentEndThread)(void); |
1470
d47d96962fcc
Fixed declarations to match mingw includes
Sam Lantinga <slouken@libsdl.org>
parents:
1465
diff
changeset
|
70 #elif __GNUC__ |
d47d96962fcc
Fixed declarations to match mingw includes
Sam Lantinga <slouken@libsdl.org>
parents:
1465
diff
changeset
|
71 typedef unsigned long (__cdecl *pfnSDL_CurrentBeginThread) (void *, unsigned, |
d47d96962fcc
Fixed declarations to match mingw includes
Sam Lantinga <slouken@libsdl.org>
parents:
1465
diff
changeset
|
72 unsigned (__stdcall *func)(void *), void *arg, |
d47d96962fcc
Fixed declarations to match mingw includes
Sam Lantinga <slouken@libsdl.org>
parents:
1465
diff
changeset
|
73 unsigned, unsigned *threadID); |
d47d96962fcc
Fixed declarations to match mingw includes
Sam Lantinga <slouken@libsdl.org>
parents:
1465
diff
changeset
|
74 typedef void (__cdecl *pfnSDL_CurrentEndThread)(unsigned code); |
1330
450721ad5436
It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
75 #else |
450721ad5436
It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
76 typedef uintptr_t (__cdecl *pfnSDL_CurrentBeginThread) (void *, unsigned, |
450721ad5436
It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
77 unsigned (__stdcall *func)(void *), void *arg, |
450721ad5436
It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
78 unsigned, unsigned *threadID); |
450721ad5436
It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
79 typedef void (__cdecl *pfnSDL_CurrentEndThread)(unsigned code); |
450721ad5436
It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
80 #endif |
1190 | 81 |
1850
d5d3a6fe05a1
Fixed thread callback calling conventions, updated OS/2 DLL name to SDL12.dll
Sam Lantinga <slouken@libsdl.org>
parents:
1471
diff
changeset
|
82 extern DECLSPEC SDL_Thread * SDLCALL SDL_CreateThread(int (SDLCALL *fn)(void *), void *data, pfnSDL_CurrentBeginThread pfnBeginThread, pfnSDL_CurrentEndThread pfnEndThread); |
1190 | 83 |
1330
450721ad5436
It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
84 #ifdef __OS2__ |
450721ad5436
It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
85 #define SDL_CreateThread(fn, data) SDL_CreateThread(fn, data, _beginthread, _endthread) |
450721ad5436
It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
86 #elif defined(_WIN32_WCE) |
450721ad5436
It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
87 #define SDL_CreateThread(fn, data) SDL_CreateThread(fn, data, NULL, NULL) |
450721ad5436
It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
88 #else |
450721ad5436
It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
89 #define SDL_CreateThread(fn, data) SDL_CreateThread(fn, data, _beginthreadex, _endthreadex) |
450721ad5436
It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
90 #endif |
1190 | 91 #else |
930
02759105b989
Date: Fri, 20 Aug 2004 08:31:20 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
92 extern DECLSPEC SDL_Thread * SDLCALL SDL_CreateThread(int (SDLCALL *fn)(void *), void *data); |
1190 | 93 #endif |
0 | 94 |
95 /* Get the 32-bit thread identifier for the current thread */ | |
337
9154ec9ca3d2
Explicitly specify the SDL API calling convention (C by default)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
96 extern DECLSPEC Uint32 SDLCALL SDL_ThreadID(void); |
0 | 97 |
98 /* Get the 32-bit thread identifier for the specified thread, | |
99 equivalent to SDL_ThreadID() if the specified thread is NULL. | |
100 */ | |
337
9154ec9ca3d2
Explicitly specify the SDL API calling convention (C by default)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
101 extern DECLSPEC Uint32 SDLCALL SDL_GetThreadID(SDL_Thread *thread); |
0 | 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 */ | |
337
9154ec9ca3d2
Explicitly specify the SDL API calling convention (C by default)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
107 extern DECLSPEC void SDLCALL SDL_WaitThread(SDL_Thread *thread, int *status); |
0 | 108 |
109 /* Forcefully kill a thread without worrying about its state */ | |
337
9154ec9ca3d2
Explicitly specify the SDL API calling convention (C by default)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
110 extern DECLSPEC void SDLCALL SDL_KillThread(SDL_Thread *thread); |
0 | 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 */ |