• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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. */
quit(int rc)14 static void quit(int rc)
15 {
16 	SDL_Quit();
17 	exit(rc);
18 }
19 
ThreadFunc(void * data)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 
main(int argc,char * argv[])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