Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Latest commit

 

History

History
87 lines (73 loc) · 2.08 KB

testthread.c

File metadata and controls

87 lines (73 loc) · 2.08 KB
 
Jun 22, 2011
Jun 22, 2011
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/*
Copyright (C) 1997-2011 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely.
*/
/* 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)
{
Nov 24, 2012
Nov 24, 2012
35
SDL_Log("Started thread %s: My thread id is %lu\n",
Jun 22, 2011
Jun 22, 2011
36
37
(char *) data, SDL_ThreadID());
while (alive) {
Nov 24, 2012
Nov 24, 2012
38
SDL_Log("Thread '%s' is alive!\n", (char *) data);
Jun 22, 2011
Jun 22, 2011
39
40
SDL_Delay(1 * 1000);
}
Nov 24, 2012
Nov 24, 2012
41
SDL_Log("Thread '%s' exiting!\n", (char *) data);
Jun 22, 2011
Jun 22, 2011
42
43
44
45
46
47
return (0);
}
static void
killed(int sig)
{
Nov 24, 2012
Nov 24, 2012
48
SDL_Log("Killed with SIGTERM, waiting 5 seconds to exit\n");
Jun 22, 2011
Jun 22, 2011
49
50
51
52
53
54
55
56
57
58
59
60
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) {
Nov 24, 2012
Nov 24, 2012
61
SDL_LogError(SDL_LOG_CATEGORY_ERROR, "Couldn't initialize SDL: %s\n", SDL_GetError());
Jun 22, 2011
Jun 22, 2011
62
63
64
65
return (1);
}
alive = 1;
Oct 2, 2011
Oct 2, 2011
66
thread = SDL_CreateThread(ThreadFunc, "One", "#1");
Jun 22, 2011
Jun 22, 2011
67
if (thread == NULL) {
Nov 24, 2012
Nov 24, 2012
68
SDL_LogError(SDL_LOG_CATEGORY_ERROR, "Couldn't create thread: %s\n", SDL_GetError());
Jun 22, 2011
Jun 22, 2011
69
70
71
quit(1);
}
SDL_Delay(5 * 1000);
Nov 24, 2012
Nov 24, 2012
72
SDL_Log("Waiting for thread #1\n");
Jun 22, 2011
Jun 22, 2011
73
74
75
76
77
alive = 0;
SDL_WaitThread(thread, NULL);
alive = 1;
signal(SIGTERM, killed);
Oct 2, 2011
Oct 2, 2011
78
thread = SDL_CreateThread(ThreadFunc, "Two", "#2");
Jun 22, 2011
Jun 22, 2011
79
if (thread == NULL) {
Nov 24, 2012
Nov 24, 2012
80
SDL_LogError(SDL_LOG_CATEGORY_ERROR, "Couldn't create thread: %s\n", SDL_GetError());
Jun 22, 2011
Jun 22, 2011
81
82
83
84
85
86
87
quit(1);
}
raise(SIGTERM);
SDL_Quit(); /* Never reached */
return (0); /* Never reached */
}