Mercurial > sdl-ios-xcode
comparison touchTest/Iphone Test/touchTestIPhone2/touchTestIPhone/include/SDL_thread.h @ 4677:31607094315c
Added Iphone project. Iphone multi-touch is now functional.
author | jimtla |
---|---|
date | Sat, 31 Jul 2010 01:24:50 +0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
4676:99b4560b7aa1 | 4677:31607094315c |
---|---|
1 /* | |
2 SDL - Simple DirectMedia Layer | |
3 Copyright (C) 1997-2010 Sam Lantinga | |
4 | |
5 This library is free software; you can redistribute it and/or | |
6 modify it under the terms of the GNU Lesser General Public | |
7 License as published by the Free Software Foundation; either | |
8 version 2.1 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 Lesser General Public License for more details. | |
14 | |
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 | |
18 | |
19 Sam Lantinga | |
20 slouken@libsdl.org | |
21 */ | |
22 | |
23 #ifndef _SDL_thread_h | |
24 #define _SDL_thread_h | |
25 | |
26 /** | |
27 * \file SDL_thread.h | |
28 * | |
29 * Header for the SDL thread management routines. | |
30 */ | |
31 | |
32 #include "SDL_stdinc.h" | |
33 #include "SDL_error.h" | |
34 | |
35 /* Thread synchronization primitives */ | |
36 #include "SDL_mutex.h" | |
37 | |
38 #include "begin_code.h" | |
39 /* Set up for C function definitions, even when using C++ */ | |
40 #ifdef __cplusplus | |
41 /* *INDENT-OFF* */ | |
42 extern "C" { | |
43 /* *INDENT-ON* */ | |
44 #endif | |
45 | |
46 /* The SDL thread structure, defined in SDL_thread.c */ | |
47 struct SDL_Thread; | |
48 typedef struct SDL_Thread SDL_Thread; | |
49 | |
50 /* The SDL thread ID */ | |
51 typedef unsigned long SDL_threadID; | |
52 | |
53 #if defined(__WIN32__) && !defined(HAVE_LIBC) | |
54 /** | |
55 * \file SDL_thread.h | |
56 * | |
57 * We compile SDL into a DLL. This means, that it's the DLL which | |
58 * creates a new thread for the calling process with the SDL_CreateThread() | |
59 * API. There is a problem with this, that only the RTL of the SDL.DLL will | |
60 * be initialized for those threads, and not the RTL of the calling | |
61 * application! | |
62 * | |
63 * To solve this, we make a little hack here. | |
64 * | |
65 * We'll always use the caller's _beginthread() and _endthread() APIs to | |
66 * start a new thread. This way, if it's the SDL.DLL which uses this API, | |
67 * then the RTL of SDL.DLL will be used to create the new thread, and if it's | |
68 * the application, then the RTL of the application will be used. | |
69 * | |
70 * So, in short: | |
71 * Always use the _beginthread() and _endthread() of the calling runtime | |
72 * library! | |
73 */ | |
74 #define SDL_PASSED_BEGINTHREAD_ENDTHREAD | |
75 #ifndef _WIN32_WCE | |
76 #include <process.h> /* This has _beginthread() and _endthread() defined! */ | |
77 #endif | |
78 | |
79 #ifdef __GNUC__ | |
80 typedef unsigned long (__cdecl * pfnSDL_CurrentBeginThread) (void *, unsigned, | |
81 unsigned | |
82 (__stdcall * | |
83 func) (void *), | |
84 void *arg, | |
85 unsigned, | |
86 unsigned | |
87 *threadID); | |
88 typedef void (__cdecl * pfnSDL_CurrentEndThread) (unsigned code); | |
89 #else | |
90 typedef uintptr_t(__cdecl * pfnSDL_CurrentBeginThread) (void *, unsigned, | |
91 unsigned (__stdcall * | |
92 func) (void | |
93 *), | |
94 void *arg, unsigned, | |
95 unsigned *threadID); | |
96 typedef void (__cdecl * pfnSDL_CurrentEndThread) (unsigned code); | |
97 #endif | |
98 | |
99 /** | |
100 * Create a thread. | |
101 */ | |
102 extern DECLSPEC SDL_Thread *SDLCALL | |
103 SDL_CreateThread(int (SDLCALL * f) (void *), void *data, | |
104 pfnSDL_CurrentBeginThread pfnBeginThread, | |
105 pfnSDL_CurrentEndThread pfnEndThread); | |
106 | |
107 #if defined(_WIN32_WCE) | |
108 | |
109 /** | |
110 * Create a thread. | |
111 */ | |
112 #define SDL_CreateThread(fn, data) SDL_CreateThread(fn, data, NULL, NULL) | |
113 | |
114 #else | |
115 | |
116 /** | |
117 * Create a thread. | |
118 */ | |
119 #define SDL_CreateThread(fn, data) SDL_CreateThread(fn, data, _beginthreadex, _endthreadex) | |
120 | |
121 #endif | |
122 #else | |
123 | |
124 /** | |
125 * Create a thread. | |
126 */ | |
127 extern DECLSPEC SDL_Thread *SDLCALL | |
128 SDL_CreateThread(int (SDLCALL * fn) (void *), void *data); | |
129 | |
130 #endif | |
131 | |
132 /** | |
133 * Get the thread identifier for the current thread. | |
134 */ | |
135 extern DECLSPEC SDL_threadID SDLCALL SDL_ThreadID(void); | |
136 | |
137 /** | |
138 * Get the thread identifier for the specified thread. | |
139 * | |
140 * Equivalent to SDL_ThreadID() if the specified thread is NULL. | |
141 */ | |
142 extern DECLSPEC SDL_threadID SDLCALL SDL_GetThreadID(SDL_Thread * thread); | |
143 | |
144 /** | |
145 * Wait for a thread to finish. | |
146 * | |
147 * The return code for the thread function is placed in the area | |
148 * pointed to by \c status, if \c status is not NULL. | |
149 */ | |
150 extern DECLSPEC void SDLCALL SDL_WaitThread(SDL_Thread * thread, int *status); | |
151 | |
152 | |
153 /* Ends C function definitions when using C++ */ | |
154 #ifdef __cplusplus | |
155 /* *INDENT-OFF* */ | |
156 } | |
157 /* *INDENT-ON* */ | |
158 #endif | |
159 #include "close_code.h" | |
160 | |
161 #endif /* _SDL_thread_h */ | |
162 | |
163 /* vi: set ts=4 sw=4 expandtab: */ |