Rev 1 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 1 | Rev 8 | ||
|---|---|---|---|
| Line 1... | Line 1... | ||
| 1 | /* |
1 | /* |
| 2 | Simple DirectMedia Layer |
2 | Simple DirectMedia Layer |
| 3 | Copyright (C) 1997- |
3 | Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org> |
| 4 | 4 | ||
| 5 | This software is provided 'as-is', without any express or implied |
5 | This software is provided 'as-is', without any express or implied |
| 6 | warranty. In no event will the authors be held liable for any damages |
6 | warranty. In no event will the authors be held liable for any damages |
| 7 | arising from the use of this software. |
7 | arising from the use of this software. |
| 8 | 8 | ||
| Line 52... | Line 52... | ||
| 52 | typedef unsigned int SDL_TLSID; |
52 | typedef unsigned int SDL_TLSID; |
| 53 | 53 | ||
| 54 | /** |
54 | /** |
| 55 | * The SDL thread priority. |
55 | * The SDL thread priority. |
| 56 | * |
56 | * |
| 57 | * \note On many systems you require special privileges to set high priority. |
57 | * \note On many systems you require special privileges to set high or time critical priority. |
| 58 | */ |
58 | */ |
| 59 | typedef enum { |
59 | typedef enum { |
| 60 | SDL_THREAD_PRIORITY_LOW, |
60 | SDL_THREAD_PRIORITY_LOW, |
| 61 | SDL_THREAD_PRIORITY_NORMAL, |
61 | SDL_THREAD_PRIORITY_NORMAL, |
| 62 |
|
62 | SDL_THREAD_PRIORITY_HIGH, |
| - | 63 | SDL_THREAD_PRIORITY_TIME_CRITICAL |
|
| 63 | } SDL_ThreadPriority; |
64 | } SDL_ThreadPriority; |
| 64 | 65 | ||
| 65 | /** |
66 | /** |
| 66 | * The function passed to SDL_CreateThread(). |
67 | * The function passed to SDL_CreateThread(). |
| 67 | * It is passed a void* user context parameter and returns an int. |
68 | * It is passed a void* user context parameter and returns an int. |
| Line 102... | Line 103... | ||
| 102 | */ |
103 | */ |
| 103 | extern DECLSPEC SDL_Thread *SDLCALL |
104 | extern DECLSPEC SDL_Thread *SDLCALL |
| 104 | SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data, |
105 | SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data, |
| 105 | pfnSDL_CurrentBeginThread pfnBeginThread, |
106 | pfnSDL_CurrentBeginThread pfnBeginThread, |
| 106 | pfnSDL_CurrentEndThread pfnEndThread); |
107 | pfnSDL_CurrentEndThread pfnEndThread); |
| - | 108 | ||
| - | 109 | extern DECLSPEC SDL_Thread *SDLCALL |
|
| - | 110 | SDL_CreateThreadWithStackSize(int (SDLCALL * fn) (void *), |
|
| - | 111 | const char *name, const size_t stacksize, void *data, |
|
| - | 112 | pfnSDL_CurrentBeginThread pfnBeginThread, |
|
| - | 113 | pfnSDL_CurrentEndThread pfnEndThread); |
|
| - | 114 | ||
| 107 | 115 | ||
| 108 | /** |
116 | /** |
| 109 | * Create a thread. |
117 | * Create a thread. |
| 110 | */ |
118 | */ |
| 111 | #if defined(SDL_CreateThread) && SDL_DYNAMIC_API |
119 | #if defined(SDL_CreateThread) && SDL_DYNAMIC_API |
| 112 | #undef SDL_CreateThread |
120 | #undef SDL_CreateThread |
| 113 | #define SDL_CreateThread(fn, name, data) SDL_CreateThread_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthreadex, (pfnSDL_CurrentEndThread)_endthreadex) |
121 | #define SDL_CreateThread(fn, name, data) SDL_CreateThread_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthreadex, (pfnSDL_CurrentEndThread)_endthreadex) |
| - | 122 | #undef SDL_CreateThreadWithStackSize |
|
| - | 123 | #define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize_REAL(fn, name, stacksize, data, (pfnSDL_CurrentBeginThread)_beginthreadex, (pfnSDL_CurrentEndThread)_endthreadex) |
|
| 114 | #else |
124 | #else |
| 115 | #define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthreadex, (pfnSDL_CurrentEndThread)_endthreadex) |
125 | #define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthreadex, (pfnSDL_CurrentEndThread)_endthreadex) |
| - | 126 | #define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthreadex, (pfnSDL_CurrentEndThread)_endthreadex) |
|
| 116 | #endif |
127 | #endif |
| 117 | 128 | ||
| 118 | #elif defined(__OS2__) |
129 | #elif defined(__OS2__) |
| 119 | /* |
130 | /* |
| 120 | * just like the windows case above: We compile SDL2 |
131 | * just like the windows case above: We compile SDL2 |
| Line 128... | Line 139... | ||
| 128 | #endif |
139 | #endif |
| 129 | typedef int (*pfnSDL_CurrentBeginThread)(void (*func)(void *), void *, unsigned, void * /*arg*/); |
140 | typedef int (*pfnSDL_CurrentBeginThread)(void (*func)(void *), void *, unsigned, void * /*arg*/); |
| 130 | typedef void (*pfnSDL_CurrentEndThread)(void); |
141 | typedef void (*pfnSDL_CurrentEndThread)(void); |
| 131 | extern DECLSPEC SDL_Thread *SDLCALL |
142 | extern DECLSPEC SDL_Thread *SDLCALL |
| 132 | SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data, |
143 | SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data, |
| - | 144 | pfnSDL_CurrentBeginThread pfnBeginThread, |
|
| - | 145 | pfnSDL_CurrentEndThread pfnEndThread); |
|
| - | 146 | extern DECLSPEC SDL_Thread *SDLCALL |
|
| - | 147 | SDL_CreateThreadWithStackSize(SDL_ThreadFunction fn, const char *name, const size_t stacksize, void *data, |
|
| 133 | pfnSDL_CurrentBeginThread pfnBeginThread, |
148 | pfnSDL_CurrentBeginThread pfnBeginThread, |
| 134 | pfnSDL_CurrentEndThread pfnEndThread); |
149 | pfnSDL_CurrentEndThread pfnEndThread); |
| 135 | #if defined(SDL_CreateThread) && SDL_DYNAMIC_API |
150 | #if defined(SDL_CreateThread) && SDL_DYNAMIC_API |
| 136 | #undef SDL_CreateThread |
151 | #undef SDL_CreateThread |
| 137 | #define SDL_CreateThread(fn, name, data) SDL_CreateThread_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthread, (pfnSDL_CurrentEndThread)_endthread) |
152 | #define SDL_CreateThread(fn, name, data) SDL_CreateThread_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthread, (pfnSDL_CurrentEndThread)_endthread) |
| - | 153 | #undef SDL_CreateThreadWithStackSize |
|
| - | 154 | #define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthread, (pfnSDL_CurrentEndThread)_endthread) |
|
| 138 | #else |
155 | #else |
| 139 | #define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthread, (pfnSDL_CurrentEndThread)_endthread) |
156 | #define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthread, (pfnSDL_CurrentEndThread)_endthread) |
| - | 157 | #define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize(fn, name, stacksize, data, (pfnSDL_CurrentBeginThread)_beginthread, (pfnSDL_CurrentEndThread)_endthread) |
|
| 140 | #endif |
158 | #endif |
| 141 | 159 | ||
| 142 | #else |
160 | #else |
| - | 161 | ||
| - | 162 | /** |
|
| - | 163 | * Create a thread with a default stack size. |
|
| - | 164 | * |
|
| - | 165 | * This is equivalent to calling: |
|
| - | 166 | * SDL_CreateThreadWithStackSize(fn, name, 0, data); |
|
| - | 167 | */ |
|
| - | 168 | extern DECLSPEC SDL_Thread *SDLCALL |
|
| - | 169 | SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data); |
|
| 143 | 170 | ||
| 144 | /** |
171 | /** |
| 145 | * Create a thread. |
172 | * Create a thread. |
| 146 | * |
173 | * |
| 147 | * Thread naming is a little complicated: Most systems have very small |
174 | * Thread naming is a little complicated: Most systems have very small |
| Line 156... | Line 183... | ||
| 156 | * http://stackoverflow.com/questions/149932/naming-conventions-for-threads |
183 | * http://stackoverflow.com/questions/149932/naming-conventions-for-threads |
| 157 | * |
184 | * |
| 158 | * If a system imposes requirements, SDL will try to munge the string for |
185 | * If a system imposes requirements, SDL will try to munge the string for |
| 159 | * it (truncate, etc), but the original string contents will be available |
186 | * it (truncate, etc), but the original string contents will be available |
| 160 | * from SDL_GetThreadName(). |
187 | * from SDL_GetThreadName(). |
| - | 188 | * |
|
| - | 189 | * The size (in bytes) of the new stack can be specified. Zero means "use |
|
| - | 190 | * the system default" which might be wildly different between platforms |
|
| - | 191 | * (x86 Linux generally defaults to eight megabytes, an embedded device |
|
| - | 192 | * might be a few kilobytes instead). |
|
| - | 193 | * |
|
| - | 194 | * In SDL 2.1, stacksize will be folded into the original SDL_CreateThread |
|
| - | 195 | * function. |
|
| 161 | */ |
196 | */ |
| 162 | extern DECLSPEC SDL_Thread *SDLCALL |
197 | extern DECLSPEC SDL_Thread *SDLCALL |
| 163 |
|
198 | SDL_CreateThreadWithStackSize(SDL_ThreadFunction fn, const char *name, const size_t stacksize, void *data); |
| 164 | 199 | ||
| 165 | #endif |
200 | #endif |
| 166 | 201 | ||
| 167 | /** |
202 | /** |
| 168 | * Get the thread name, as it was specified in SDL_CreateThread(). |
203 | * Get the thread name, as it was specified in SDL_CreateThread(). |