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 }
|