view test/torturethread.c @ 158:4382c38dfbee

Date: Tue, 21 Aug 2001 03:50:01 +0200 From: Max Horn <max@quendi.de> Subject: New patch for OS X Attached a .patch file for SDL/OSX with some nice bug fixes / enhancments. * fixes the activation issues, which also caused the window to be always drawn like an inactive. The close/minimize widgets now are animated properly, too. * the menu items are automatically adjusted to use the app name instead of just "SDL App". I did this so that we really can use one central SDLMain.nib file, w/o requiring developers to make a copy of it and adjust it. * libSDLMain now contains the proper cocoa code, not as before the carbon code. This means apps no longer have to carry a copy of SDLMain.m/SDLMain.h * revamped configure.in to properly build a Cocoa/Quartz SDL lib, not a Carbon based SDL lib
author Sam Lantinga <slouken@libsdl.org>
date Tue, 21 Aug 2001 07:19:59 +0000
parents 74212992fb08
children be9c9c8f6d53
line wrap: on
line source


/* Simple test of the SDL threading code */

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <string.h>

#include "SDL.h"
#include "SDL_thread.h"

#define NUMTHREADS 10

static char volatile time_for_threads_to_die[NUMTHREADS];

int SubThreadFunc(void *data) {
	while(! *(int volatile *)data) {
		; /*SDL_Delay(10); /* do nothing */
	}
	return 0;
}

int ThreadFunc(void *data) {
	SDL_Thread *sub_threads[NUMTHREADS];
	int flags[NUMTHREADS];
	int i;
	int tid = (int ) data;

	fprintf(stderr, "Creating Thread %d\n", tid);

	for(i = 0; i < NUMTHREADS; i++) {
		flags[i] = 0;
		sub_threads[i] = SDL_CreateThread(SubThreadFunc, &flags[i]);
	}

	printf("Thread '%d' waiting for signal\n", tid);
	while(time_for_threads_to_die[tid] != 1) {
		; /* do nothing */
	}

	printf("Thread '%d' sending signals to subthreads\n", tid);
	for(i = 0; i <  NUMTHREADS; i++) {
		flags[i] = 1;
		SDL_WaitThread(sub_threads[i], NULL);
	}

	printf("Thread '%d' exiting!\n", tid);

	return 0;
}

int main(int argc, char *argv[])
{
	SDL_Thread *threads[NUMTHREADS];
	int i;

	/* Load the SDL library */
	if ( SDL_Init(0) < 0 ) {
		fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError());
		exit(1);
	}
	atexit(SDL_Quit);


	signal(SIGSEGV, SIG_DFL);
	for(i = 0; i < NUMTHREADS; i++) {
		time_for_threads_to_die[i] = 0;
		threads[i] = SDL_CreateThread(ThreadFunc, (void *) i);
	
		if ( threads[i] == NULL ) {
			fprintf(stderr,
			"Couldn't create thread: %s\n", SDL_GetError());
			exit(1);
		}
	}

	for(i = 0; i < NUMTHREADS; i++) {
		time_for_threads_to_die[i] = 1;
	}

	for(i = NUMTHREADS-1; i >= 0; --i) {
		SDL_WaitThread(threads[i], NULL);
	}
	return(0);	/* Never reached */
}