sdl

FORK: Simple Directmedia Layer
git clone https://git.neptards.moe/neptards/sdl.git
Log | Files | Refs

testerror.c (1967B)


      1 /*
      2   Copyright (C) 1997-2020 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 }