testsem.c
资源名称:NETVIDEO.rar [点击查看]
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:2k
源码类别:
流媒体/Mpeg4/MP4
开发平台:
Visual C++
- /* Simple test of the SDL semaphore code */
- #include <stdio.h>
- #include <stdlib.h>
- #include <signal.h>
- #include "SDL.h"
- #include "SDL_thread.h"
- #define NUM_THREADS 10
- static SDL_sem *sem;
- int alive = 1;
- int ThreadFunc(void *data)
- {
- while ( alive ) {
- SDL_SemWait(sem);
- fprintf(stderr, "Thread number %d has got the semaphore (value = %d)!n", (int)data, SDL_SemValue(sem));
- SDL_Delay(200);
- SDL_SemPost(sem);
- fprintf(stderr, "Thread number %d has released the semaphore (value = %d)!n", (int)data, SDL_SemValue(sem));
- SDL_Delay(1); /* For the scheduler */
- }
- printf("Thread number %d exiting.n", (int)data);
- return 0;
- }
- static void killed(int sig)
- {
- alive = 0;
- }
- int main(int argc, char **argv)
- {
- SDL_Thread *threads[NUM_THREADS];
- int i, init_sem;
- if(argc < 2) {
- fprintf(stderr,"Usage: %s init_valuen", argv[0]);
- exit(1);
- }
- /* Load the SDL library */
- if ( SDL_Init(0) < 0 ) {
- fprintf(stderr, "Couldn't initialize SDL: %sn",SDL_GetError());
- exit(1);
- }
- atexit(SDL_Quit);
- signal(SIGTERM, killed);
- signal(SIGINT, killed);
- init_sem = atoi(argv[1]);
- sem = SDL_CreateSemaphore(init_sem);
- printf("Running %d threads, semaphore value = %dn", NUM_THREADS, init_sem);
- /* Create all the threads */
- for( i = 0; i < NUM_THREADS; ++i ) {
- threads[i] = SDL_CreateThread(ThreadFunc, (void*)i);
- }
- /* Wait 10 seconds */
- SDL_Delay(10 * 1000);
- /* Wait for all threads to finish */
- printf("Waiting for threads to finishn");
- alive = 0;
- for( i = 0; i < NUM_THREADS; ++i ) {
- SDL_WaitThread(threads[i], NULL);
- }
- printf("Finished waiting for threadsn");
- SDL_DestroySemaphore(sem);
- return(0);
- }