view test/testerror.c @ 1626:a80e1e0880b8

Fixed bug #176 [I'm fixing this for the public headers, but I'm not going to bother for the SDL library code (yet)] To clarify: Normaly, GCC (or, to be precise, the preprocessor) will ignore this, and compile the code happily. However, one can specify -Wundef to get a warning about this. One can probably argue whether to consider this a bug or not; but I think that (a) from a semantic point of view, using "#if FOO" when FOO is not defined is strange, and (b) since it is possible to trigger a warning about this, and a trivial fix exists, it should be corrected. I can think of two alternative patches, BTW: 1) Simply use #define HAVE_FOO 0, instead of not defining HAVE_FOO at all 2) Change #if HAVE_FOO to #if HAVE_FOO+0 which always does the right thing. But I think I still prefer the attached patch :-).
author Sam Lantinga <slouken@libsdl.org>
date Thu, 13 Apr 2006 13:38:40 +0000
parents be9c9c8f6d53
children 14717b52abc0
line wrap: on
line source


/* Simple test of the SDL threading code and error handling */

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

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

static int alive = 0;

/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
static void quit(int rc)
{
	SDL_Quit();
	exit(rc);
}

int ThreadFunc(void *data)
{
	/* Set the child thread error string */
	SDL_SetError("Thread %s (%d) had a problem: %s",
			(char *)data, SDL_ThreadID(), "nevermind");
	while ( alive ) {
		printf("Thread '%s' is alive!\n", (char *)data);
		SDL_Delay(1*1000);
	}
	printf("Child thread error string: %s\n", SDL_GetError());
	return(0);
}

int main(int argc, char *argv[])
{
	SDL_Thread *thread;

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

	/* Set the error value for the main thread */
	SDL_SetError("No worries");

	alive = 1;
	thread = SDL_CreateThread(ThreadFunc, "#1");
	if ( thread == NULL ) {
		fprintf(stderr, "Couldn't create thread: %s\n", SDL_GetError());
		quit(1);
	}
	SDL_Delay(5*1000);
	printf("Waiting for thread #1\n");
	alive = 0;
	SDL_WaitThread(thread, NULL);

	printf("Main thread error string: %s\n", SDL_GetError());

	SDL_Quit();
	return(0);
}