SDL-1.2.14
[sdl_omap.git] / test / testhread.c
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 /* 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         printf("Started thread %s: My thread id is %u\n",
23                                 (char *)data, SDL_ThreadID());
24         while ( alive ) {
25                 printf("Thread '%s' is alive!\n", (char *)data);
26                 SDL_Delay(1*1000);
27         }
28         printf("Thread '%s' exiting!\n", (char *)data);
29         return(0);
30 }
31
32 static void killed(int sig)
33 {
34         printf("Killed with SIGTERM, waiting 5 seconds to exit\n");
35         SDL_Delay(5*1000);
36         alive = 0;
37         quit(0);
38 }
39
40 int main(int argc, char *argv[])
41 {
42         SDL_Thread *thread;
43
44         /* Load the SDL library */
45         if ( SDL_Init(0) < 0 ) {
46                 fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError());
47                 return(1);
48         }
49
50         alive = 1;
51         thread = SDL_CreateThread(ThreadFunc, "#1");
52         if ( thread == NULL ) {
53                 fprintf(stderr, "Couldn't create thread: %s\n", SDL_GetError());
54                 quit(1);
55         }
56         SDL_Delay(5*1000);
57         printf("Waiting for thread #1\n");
58         alive = 0;
59         SDL_WaitThread(thread, NULL);
60
61         alive = 1;
62         thread = SDL_CreateThread(ThreadFunc, "#2");
63         if ( thread == NULL ) {
64                 fprintf(stderr, "Couldn't create thread: %s\n", SDL_GetError());
65                 quit(1);
66         }
67         SDL_Delay(5*1000);
68         printf("Killing thread #2\n");
69         SDL_KillThread(thread);
70
71         alive = 1;
72         signal(SIGTERM, killed);
73         thread = SDL_CreateThread(ThreadFunc, "#3");
74         if ( thread == NULL ) {
75                 fprintf(stderr, "Couldn't create thread: %s\n", SDL_GetError());
76                 quit(1);
77         }
78         raise(SIGTERM);
79
80         SDL_Quit();     /* Never reached */
81         return(0);      /* Never reached */
82 }