view test/testhread.c @ 4219:0a7481888fd1 SDL-1.2

Fixed bug #695 Nomad 2009-02-08 10:34:43 PST The 2nd init is good. The problem is in "SDL_dibevents.c" in DIB_CreateWindow() in SVN: { char *windowid = SDL_getenv("SDL_WINDOWID"); SDL_RegisterApp(NULL, 0, 0); ... using of data to which windowid is points problem: SDL_RegisterApp() may call SDL_getenv() and windowid will point to some wrong string solve: char *windowid; SDL_RegisterApp(NULL, 0, 0); windowid = SDL_getenv("SDL_WINDOWID");
author Sam Lantinga <slouken@libsdl.org>
date Mon, 21 Sep 2009 09:54:33 +0000
parents 290b5baf2fca
children 782fd950bd46 c121d94672cb
line wrap: on
line source


/* Simple test of the SDL threading code */

#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)
{
	printf("Started thread %s: My thread id is %u\n",
				(char *)data, SDL_ThreadID());
	while ( alive ) {
		printf("Thread '%s' is alive!\n", (char *)data);
		SDL_Delay(1*1000);
	}
	printf("Thread '%s' exiting!\n", (char *)data);
	return(0);
}

static void killed(int sig)
{
	printf("Killed with SIGTERM, waiting 5 seconds to exit\n");
	SDL_Delay(5*1000);
	alive = 0;
	quit(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);
	}

	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);

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

	alive = 1;
	signal(SIGTERM, killed);
	thread = SDL_CreateThread(ThreadFunc, "#3");
	if ( thread == NULL ) {
		fprintf(stderr, "Couldn't create thread: %s\n", SDL_GetError());
		quit(1);
	}
	raise(SIGTERM);

	SDL_Quit();	/* Never reached */
	return(0);	/* Never reached */
}