comparison test/testsem.c @ 1662:782fd950bd46 SDL-1.3

Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API. WARNING: None of the video drivers have been updated for the new API yet! The API is still under design and very fluid. The code is now run through a consistent indent format: indent -i4 -nut -nsc -br -ce The headers are being converted to automatically generate doxygen documentation.
author Sam Lantinga <slouken@libsdl.org>
date Sun, 28 May 2006 13:04:16 +0000
parents 14717b52abc0
children 4da1ee79c9af
comparison
equal deleted inserted replaced
1661:281d3f4870e5 1662:782fd950bd46
11 #define NUM_THREADS 10 11 #define NUM_THREADS 10
12 12
13 static SDL_sem *sem; 13 static SDL_sem *sem;
14 int alive = 1; 14 int alive = 1;
15 15
16 int SDLCALL ThreadFunc(void *data) 16 int SDLCALL
17 ThreadFunc (void *data)
17 { 18 {
18 int threadnum = (int)(uintptr_t)data; 19 int threadnum = (int) (uintptr_t) data;
19 while ( alive ) { 20 while (alive) {
20 SDL_SemWait(sem); 21 SDL_SemWait (sem);
21 fprintf(stderr, "Thread number %d has got the semaphore (value = %d)!\n", threadnum, SDL_SemValue(sem)); 22 fprintf (stderr,
22 SDL_Delay(200); 23 "Thread number %d has got the semaphore (value = %d)!\n",
23 SDL_SemPost(sem); 24 threadnum, SDL_SemValue (sem));
24 fprintf(stderr, "Thread number %d has released the semaphore (value = %d)!\n", threadnum, SDL_SemValue(sem)); 25 SDL_Delay (200);
25 SDL_Delay(1); /* For the scheduler */ 26 SDL_SemPost (sem);
26 } 27 fprintf (stderr,
27 printf("Thread number %d exiting.\n", threadnum); 28 "Thread number %d has released the semaphore (value = %d)!\n",
28 return 0; 29 threadnum, SDL_SemValue (sem));
30 SDL_Delay (1); /* For the scheduler */
31 }
32 printf ("Thread number %d exiting.\n", threadnum);
33 return 0;
29 } 34 }
30 35
31 static void killed(int sig) 36 static void
37 killed (int sig)
32 { 38 {
33 alive = 0; 39 alive = 0;
34 } 40 }
35 41
36 int main(int argc, char **argv) 42 int
43 main (int argc, char **argv)
37 { 44 {
38 SDL_Thread *threads[NUM_THREADS]; 45 SDL_Thread *threads[NUM_THREADS];
39 uintptr_t i; 46 uintptr_t i;
40 int init_sem; 47 int init_sem;
41 48
42 if(argc < 2) { 49 if (argc < 2) {
43 fprintf(stderr,"Usage: %s init_value\n", argv[0]); 50 fprintf (stderr, "Usage: %s init_value\n", argv[0]);
44 return(1); 51 return (1);
45 } 52 }
46 53
47 /* Load the SDL library */ 54 /* Load the SDL library */
48 if ( SDL_Init(0) < 0 ) { 55 if (SDL_Init (0) < 0) {
49 fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError()); 56 fprintf (stderr, "Couldn't initialize SDL: %s\n", SDL_GetError ());
50 return(1); 57 return (1);
51 } 58 }
52 signal(SIGTERM, killed); 59 signal (SIGTERM, killed);
53 signal(SIGINT, killed); 60 signal (SIGINT, killed);
54
55 init_sem = atoi(argv[1]);
56 sem = SDL_CreateSemaphore(init_sem);
57
58 printf("Running %d threads, semaphore value = %d\n", NUM_THREADS, init_sem);
59 /* Create all the threads */
60 for( i = 0; i < NUM_THREADS; ++i ) {
61 threads[i] = SDL_CreateThread(ThreadFunc, (void*)i);
62 }
63 61
64 /* Wait 10 seconds */ 62 init_sem = atoi (argv[1]);
65 SDL_Delay(10 * 1000); 63 sem = SDL_CreateSemaphore (init_sem);
66 64
67 /* Wait for all threads to finish */ 65 printf ("Running %d threads, semaphore value = %d\n", NUM_THREADS,
68 printf("Waiting for threads to finish\n"); 66 init_sem);
69 alive = 0; 67 /* Create all the threads */
70 for( i = 0; i < NUM_THREADS; ++i ) { 68 for (i = 0; i < NUM_THREADS; ++i) {
71 SDL_WaitThread(threads[i], NULL); 69 threads[i] = SDL_CreateThread (ThreadFunc, (void *) i);
72 } 70 }
73 printf("Finished waiting for threads\n");
74 71
75 SDL_DestroySemaphore(sem); 72 /* Wait 10 seconds */
76 SDL_Quit(); 73 SDL_Delay (10 * 1000);
77 return(0); 74
75 /* Wait for all threads to finish */
76 printf ("Waiting for threads to finish\n");
77 alive = 0;
78 for (i = 0; i < NUM_THREADS; ++i) {
79 SDL_WaitThread (threads[i], NULL);
80 }
81 printf ("Finished waiting for threads\n");
82
83 SDL_DestroySemaphore (sem);
84 SDL_Quit ();
85 return (0);
78 } 86 }