Mercurial > sdl-ios-xcode
view test/testlock.c @ 666:fbec2501cf9f
ate: Mon, 4 Aug 2003 19:10:14 +0300
From: "Mike Gorchak"
Subject: SDL/QNX forgotten fixes
Just found, that one chunk for configure.in has not been applied and one for\
gotten by me :) Please add it to CVS.
P.S. Now QNX6.2.1 have the dlopen in libc and in the libltdl. So libc's vari\
ant more prefered, and ltdl rest for compatibility. In this small patch I wa\
s added proper checks.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Wed, 06 Aug 2003 20:20:30 +0000 |
parents | 74212992fb08 |
children | be9c9c8f6d53 |
line wrap: on
line source
/* Test the thread and mutex locking functions Also exercises the system's signal/thread interaction */ #include <signal.h> #include <stdio.h> #include <stdlib.h> #include "SDL.h" #include "SDL_mutex.h" #include "SDL_thread.h" static SDL_mutex *mutex = NULL; static Uint32 mainthread; static SDL_Thread *threads[6]; void printid(void) { printf("Process %u: exiting\n", SDL_ThreadID()); } void terminate(int sig) { printf("Process %u: raising SIGTERM\n", SDL_ThreadID()); raise(SIGTERM); } void closemutex(int sig) { Uint32 id = SDL_ThreadID(); int i; printf("Process %u: Cleaning up...\n", id == mainthread ? 0 : id); for ( i=0; i<6; ++i ) SDL_KillThread(threads[i]); SDL_DestroyMutex(mutex); exit(sig); } int Run(void *data) { if ( SDL_ThreadID() == mainthread ) signal(SIGTERM, closemutex); while ( 1 ) { printf("Process %u ready to work\n", SDL_ThreadID()); if ( SDL_mutexP(mutex) < 0 ) { fprintf(stderr, "Couldn't lock mutex: %s", SDL_GetError()); exit(1); } printf("Process %u, working!\n", SDL_ThreadID()); SDL_Delay(1*1000); printf("Process %u, done!\n", SDL_ThreadID()); if ( SDL_mutexV(mutex) < 0 ) { fprintf(stderr, "Couldn't unlock mutex: %s", SDL_GetError()); exit(1); } /* If this sleep isn't done, then threads may starve */ SDL_Delay(10); } return(0); } int main(int argc, char *argv[]) { int i; int maxproc = 6; /* Load the SDL library */ if ( SDL_Init(0) < 0 ) { fprintf(stderr, "%s\n", SDL_GetError()); exit(1); } atexit(SDL_Quit); if ( (mutex=SDL_CreateMutex()) == NULL ) { fprintf(stderr, "Couldn't create mutex: %s\n", SDL_GetError()); exit(1); } mainthread = SDL_ThreadID(); printf("Main thread: %u\n", mainthread); atexit(printid); for ( i=0; i<maxproc; ++i ) { if ( (threads[i]=SDL_CreateThread(Run, NULL)) == NULL ) fprintf(stderr, "Couldn't create thread!\n"); } signal(SIGINT, terminate); Run(NULL); return(0); /* Never reached */ }