1 | /* |
2 | Copyright (C) 1997-2021 Sam Lantinga <slouken@libsdl.org> |
3 | |
4 | This software is provided 'as-is', without any express or implied |
5 | warranty. In no event will the authors be held liable for any damages |
6 | arising from the use of this software. |
7 | |
8 | Permission is granted to anyone to use this software for any purpose, |
9 | including commercial applications, and to alter it and redistribute it |
10 | freely. |
11 | */ |
12 | |
13 | /* Simple test of the SDL threading code and error handling */ |
14 | |
15 | #include <stdio.h> |
16 | #include <stdlib.h> |
17 | |
18 | #include "SDL.h" |
19 | |
20 | static int alive = 0; |
21 | |
22 | /* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ |
23 | static void |
24 | quit(int rc) |
25 | { |
26 | SDL_Quit(); |
27 | exit(rc); |
28 | } |
29 | |
30 | int SDLCALL |
31 | ThreadFunc(void *data) |
32 | { |
33 | /* Set the child thread error string */ |
34 | SDL_SetError("Thread %s (%lu) had a problem: %s" , |
35 | (char *) data, SDL_ThreadID(), "nevermind" ); |
36 | while (alive) { |
37 | SDL_Log("Thread '%s' is alive!\n" , (char *) data); |
38 | SDL_Delay(1 * 1000); |
39 | } |
40 | SDL_Log("Child thread error string: %s\n" , SDL_GetError()); |
41 | return (0); |
42 | } |
43 | |
44 | int |
45 | main(int argc, char *argv[]) |
46 | { |
47 | SDL_Thread *thread; |
48 | |
49 | /* Enable standard application logging */ |
50 | SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); |
51 | |
52 | /* Load the SDL library */ |
53 | if (SDL_Init(0) < 0) { |
54 | SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n" , SDL_GetError()); |
55 | return (1); |
56 | } |
57 | |
58 | /* Set the error value for the main thread */ |
59 | SDL_SetError("No worries" ); |
60 | |
61 | alive = 1; |
62 | thread = SDL_CreateThread(ThreadFunc, NULL, "#1" ); |
63 | if (thread == NULL) { |
64 | SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create thread: %s\n" , SDL_GetError()); |
65 | quit(1); |
66 | } |
67 | SDL_Delay(5 * 1000); |
68 | SDL_Log("Waiting for thread #1\n" ); |
69 | alive = 0; |
70 | SDL_WaitThread(thread, NULL); |
71 | |
72 | SDL_Log("Main thread error string: %s\n" , SDL_GetError()); |
73 | |
74 | SDL_Quit(); |
75 | return (0); |
76 | } |
77 | |