comparison src/thread/win32/SDL_systhread.c @ 1471:9fb0eee04dd9

Enabled libc support on Win32, so we don't break binary compatibility in 1.2
author Sam Lantinga <slouken@libsdl.org>
date Mon, 06 Mar 2006 07:42:36 +0000
parents d47d96962fcc
children 14717b52abc0
comparison
equal deleted inserted replaced
1470:d47d96962fcc 1471:9fb0eee04dd9
28 28
29 #include "SDL_thread.h" 29 #include "SDL_thread.h"
30 #include "../SDL_thread_c.h" 30 #include "../SDL_thread_c.h"
31 #include "../SDL_systhread.h" 31 #include "../SDL_systhread.h"
32 32
33 #ifndef SDL_PASSED_BEGINTHREAD_ENDTHREAD
34 #ifndef _WIN32_WCE
35 /* We'll use the C library from this DLL */
36 #include <process.h>
37 #endif
38
39 #if __GNUC__
40 typedef unsigned long (__cdecl *pfnSDL_CurrentBeginThread) (void *, unsigned,
41 unsigned (__stdcall *func)(void *), void *arg,
42 unsigned, unsigned *threadID);
43 typedef void (__cdecl *pfnSDL_CurrentEndThread)(unsigned code);
44 #else
45 typedef uintptr_t (__cdecl *pfnSDL_CurrentBeginThread) (void *, unsigned,
46 unsigned (__stdcall *func)(void *), void *arg,
47 unsigned, unsigned *threadID);
48 typedef void (__cdecl *pfnSDL_CurrentEndThread)(unsigned code);
49 #endif
50 #endif /* !SDL_PASSED_BEGINTHREAD_ENDTHREAD */
51
52
33 typedef struct ThreadStartParms 53 typedef struct ThreadStartParms
34 { 54 {
35 void *args; 55 void *args;
36 pfnSDL_CurrentEndThread pfnCurrentEndThread; 56 pfnSDL_CurrentEndThread pfnCurrentEndThread;
37 } tThreadStartParms, *pThreadStartParms; 57 } tThreadStartParms, *pThreadStartParms;
54 if (pfnCurrentEndThread) 74 if (pfnCurrentEndThread)
55 (*pfnCurrentEndThread)(0); 75 (*pfnCurrentEndThread)(0);
56 return(0); 76 return(0);
57 } 77 }
58 78
79 #ifdef SDL_PASSED_BEGINTHREAD_ENDTHREAD
59 int SDL_SYS_CreateThread(SDL_Thread *thread, void *args, pfnSDL_CurrentBeginThread pfnBeginThread, pfnSDL_CurrentEndThread pfnEndThread) 80 int SDL_SYS_CreateThread(SDL_Thread *thread, void *args, pfnSDL_CurrentBeginThread pfnBeginThread, pfnSDL_CurrentEndThread pfnEndThread)
60 { 81 {
82 #else
83 int SDL_SYS_CreateThread(SDL_Thread *thread, void *args)
84 {
85 #ifdef _WIN32_WCE
86 pfnSDL_CurrentBeginThread pfnBeginThread = NULL;
87 pfnSDL_CurrentEndThread pfnEndThread = NULL;
88 #else
89 pfnSDL_CurrentBeginThread pfnBeginThread = _beginthreadex;
90 pfnSDL_CurrentEndThread pfnEndThread = _endthreadex;
91 #endif
92 #endif /* SDL_PASSED_BEGINTHREAD_ENDTHREAD */
61 unsigned threadid; 93 unsigned threadid;
62 pThreadStartParms pThreadParms = (pThreadStartParms)SDL_malloc(sizeof(tThreadStartParms)); 94 pThreadStartParms pThreadParms = (pThreadStartParms)SDL_malloc(sizeof(tThreadStartParms));
63 if (!pThreadParms) { 95 if (!pThreadParms) {
64 SDL_OutOfMemory(); 96 SDL_OutOfMemory();
65 return(-1); 97 return(-1);