0
+ − 1
+ − 2 /* Simple test of the SDL threading code */
+ − 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 int ThreadFunc(void *data)
+ − 14 {
+ − 15 printf("Started thread %s: My thread id is %u\n",
+ − 16 (char *)data, SDL_ThreadID());
+ − 17 while ( alive ) {
+ − 18 printf("Thread '%s' is alive!\n", (char *)data);
+ − 19 SDL_Delay(1*1000);
+ − 20 }
+ − 21 printf("Thread '%s' exiting!\n", (char *)data);
+ − 22 return(0);
+ − 23 }
+ − 24
+ − 25 static void killed(int sig)
+ − 26 {
+ − 27 printf("Killed with SIGTERM, waiting 5 seconds to exit\n");
+ − 28 SDL_Delay(5*1000);
+ − 29 alive = 0;
+ − 30 exit(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 exit(1);
+ − 41 }
+ − 42 atexit(SDL_Quit);
+ − 43
+ − 44 alive = 1;
+ − 45 thread = SDL_CreateThread(ThreadFunc, "#1");
+ − 46 if ( thread == NULL ) {
+ − 47 fprintf(stderr, "Couldn't create thread: %s\n", SDL_GetError());
+ − 48 exit(1);
+ − 49 }
+ − 50 SDL_Delay(5*1000);
+ − 51 printf("Waiting for thread #1\n");
+ − 52 alive = 0;
+ − 53 SDL_WaitThread(thread, NULL);
+ − 54
+ − 55 alive = 1;
+ − 56 thread = SDL_CreateThread(ThreadFunc, "#2");
+ − 57 if ( thread == NULL ) {
+ − 58 fprintf(stderr, "Couldn't create thread: %s\n", SDL_GetError());
+ − 59 exit(1);
+ − 60 }
+ − 61 SDL_Delay(5*1000);
+ − 62 printf("Killing thread #2\n");
+ − 63 SDL_KillThread(thread);
+ − 64
+ − 65 alive = 1;
+ − 66 signal(SIGTERM, killed);
+ − 67 thread = SDL_CreateThread(ThreadFunc, "#3");
+ − 68 if ( thread == NULL ) {
+ − 69 fprintf(stderr, "Couldn't create thread: %s\n", SDL_GetError());
+ − 70 exit(1);
+ − 71 }
+ − 72 raise(SIGTERM);
+ − 73
+ − 74 return(0); /* Never reached */
+ − 75 }