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
11static int alive = 0;
12
13/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
14static void quit(int rc)
15{
16	SDL_Quit();
17	exit(rc);
18}
19
20int 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
33int 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