view test/testerror.c @ 4347:38f22ed3a433 SDL-1.2

Option to fix bug #851 For some people setting the period size works better (and is what SDL 1.2.13 did), but for most people it's the same or worse. You can use an environment variable to pick which one you want.
author Sam Lantinga <slouken@libsdl.org>
date Sat, 17 Oct 2009 06:55:17 +0000
parents 290b5baf2fca
children 782fd950bd46 c121d94672cb
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 SDLCALL 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);
}