1 2 /* Simple test of the SDL threading code and error handling */ 3 4 #include <stdio.h> 5 #include <stdlib.h> 6 #include <signal.h> 7 8 #include "SDL.h" 9 #include "SDL_thread.h" 10 11 static int alive = 0; 12 13 /* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ 14 static void quit(int rc) 15 { 16 SDL_Quit(); 17 exit(rc); 18 } 19 20 int SDLCALL ThreadFunc(void *data) 21 { 22 /* Set the child thread error string */ 23 SDL_SetError("Thread %s (%d) had a problem: %s", 24 (char *)data, SDL_ThreadID(), "nevermind"); 25 while ( alive ) { 26 printf("Thread '%s' is alive!\n", (char *)data); 27 SDL_Delay(1*1000); 28 } 29 printf("Child thread error string: %s\n", SDL_GetError()); 30 return(0); 31 } 32 33 int main(int argc, char *argv[]) 34 { 35 SDL_Thread *thread; 36 37 /* Load the SDL library */ 38 if ( SDL_Init(0) < 0 ) { 39 fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError()); 40 return(1); 41 } 42 43 /* Set the error value for the main thread */ 44 SDL_SetError("No worries"); 45 46 alive = 1; 47 thread = SDL_CreateThread(ThreadFunc, "#1"); 48 if ( thread == NULL ) { 49 fprintf(stderr, "Couldn't create thread: %s\n", SDL_GetError()); 50 quit(1); 51 } 52 SDL_Delay(5*1000); 53 printf("Waiting for thread #1\n"); 54 alive = 0; 55 SDL_WaitThread(thread, NULL); 56 57 printf("Main thread error string: %s\n", SDL_GetError()); 58 59 SDL_Quit(); 60 return(0); 61 } 62