comparison test/testhread.c @ 1895:c121d94672cb

SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
author Sam Lantinga <slouken@libsdl.org>
date Mon, 10 Jul 2006 21:04:37 +0000
parents 290b5baf2fca
children 4436464c4f51
comparison
equal deleted inserted replaced
1894:c69cee13dd76 1895:c121d94672cb
9 #include "SDL_thread.h" 9 #include "SDL_thread.h"
10 10
11 static int alive = 0; 11 static int alive = 0;
12 12
13 /* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ 13 /* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
14 static void quit(int rc) 14 static void
15 quit(int rc)
15 { 16 {
16 SDL_Quit(); 17 SDL_Quit();
17 exit(rc); 18 exit(rc);
18 } 19 }
19 20
20 int SDLCALL ThreadFunc(void *data) 21 int SDLCALL
22 ThreadFunc(void *data)
21 { 23 {
22 printf("Started thread %s: My thread id is %u\n", 24 printf("Started thread %s: My thread id is %u\n",
23 (char *)data, SDL_ThreadID()); 25 (char *) data, SDL_ThreadID());
24 while ( alive ) { 26 while (alive) {
25 printf("Thread '%s' is alive!\n", (char *)data); 27 printf("Thread '%s' is alive!\n", (char *) data);
26 SDL_Delay(1*1000); 28 SDL_Delay(1 * 1000);
27 } 29 }
28 printf("Thread '%s' exiting!\n", (char *)data); 30 printf("Thread '%s' exiting!\n", (char *) data);
29 return(0); 31 return (0);
30 } 32 }
31 33
32 static void killed(int sig) 34 static void
35 killed(int sig)
33 { 36 {
34 printf("Killed with SIGTERM, waiting 5 seconds to exit\n"); 37 printf("Killed with SIGTERM, waiting 5 seconds to exit\n");
35 SDL_Delay(5*1000); 38 SDL_Delay(5 * 1000);
36 alive = 0; 39 alive = 0;
37 quit(0); 40 quit(0);
38 } 41 }
39 42
40 int main(int argc, char *argv[]) 43 int
44 main(int argc, char *argv[])
41 { 45 {
42 SDL_Thread *thread; 46 SDL_Thread *thread;
43 47
44 /* Load the SDL library */ 48 /* Load the SDL library */
45 if ( SDL_Init(0) < 0 ) { 49 if (SDL_Init(0) < 0) {
46 fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError()); 50 fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError());
47 return(1); 51 return (1);
48 } 52 }
49 53
50 alive = 1; 54 alive = 1;
51 thread = SDL_CreateThread(ThreadFunc, "#1"); 55 thread = SDL_CreateThread(ThreadFunc, "#1");
52 if ( thread == NULL ) { 56 if (thread == NULL) {
53 fprintf(stderr, "Couldn't create thread: %s\n", SDL_GetError()); 57 fprintf(stderr, "Couldn't create thread: %s\n", SDL_GetError());
54 quit(1); 58 quit(1);
55 } 59 }
56 SDL_Delay(5*1000); 60 SDL_Delay(5 * 1000);
57 printf("Waiting for thread #1\n"); 61 printf("Waiting for thread #1\n");
58 alive = 0; 62 alive = 0;
59 SDL_WaitThread(thread, NULL); 63 SDL_WaitThread(thread, NULL);
60 64
61 alive = 1; 65 alive = 1;
62 thread = SDL_CreateThread(ThreadFunc, "#2"); 66 thread = SDL_CreateThread(ThreadFunc, "#2");
63 if ( thread == NULL ) { 67 if (thread == NULL) {
64 fprintf(stderr, "Couldn't create thread: %s\n", SDL_GetError()); 68 fprintf(stderr, "Couldn't create thread: %s\n", SDL_GetError());
65 quit(1); 69 quit(1);
66 } 70 }
67 SDL_Delay(5*1000); 71 SDL_Delay(5 * 1000);
68 printf("Killing thread #2\n"); 72 printf("Killing thread #2\n");
69 SDL_KillThread(thread); 73 SDL_KillThread(thread);
70 74
71 alive = 1; 75 alive = 1;
72 signal(SIGTERM, killed); 76 signal(SIGTERM, killed);
73 thread = SDL_CreateThread(ThreadFunc, "#3"); 77 thread = SDL_CreateThread(ThreadFunc, "#3");
74 if ( thread == NULL ) { 78 if (thread == NULL) {
75 fprintf(stderr, "Couldn't create thread: %s\n", SDL_GetError()); 79 fprintf(stderr, "Couldn't create thread: %s\n", SDL_GetError());
76 quit(1); 80 quit(1);
77 } 81 }
78 raise(SIGTERM); 82 raise(SIGTERM);
79 83
80 SDL_Quit(); /* Never reached */ 84 SDL_Quit(); /* Never reached */
81 return(0); /* Never reached */ 85 return (0); /* Never reached */
82 } 86 }