Browse Source

Added SDL_GetThreadState

Moritz 3 months ago
parent
commit
ca4f5dd40d

+ 31 - 0
include/SDL3/SDL_thread.h

@@ -102,6 +102,25 @@ typedef enum SDL_ThreadPriority {
     SDL_THREAD_PRIORITY_TIME_CRITICAL
 } SDL_ThreadPriority;
 
+/**
+ * The SDL thread state.
+ * 
+ * SDL stores the current state of a thread in an atomic int.
+ * The current state of a thread can be checked by calling
+ * SDL_GetThreadState.
+ * 
+ * \since This enum is available since SDL 3.1.3.
+ * 
+ * \sa SDL_GetThreadState
+ */
+typedef enum SDL_ThreadState
+{
+    SDL_THREAD_STATE_ALIVE,
+    SDL_THREAD_STATE_DETACHED,
+    SDL_THREAD_STATE_ZOMBIE,
+    SDL_THREAD_STATE_CLEANED,
+} SDL_ThreadState;
+
 /**
  * The function passed to SDL_CreateThread() as the new thread's entry point.
  *
@@ -422,6 +441,18 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SetCurrentThreadPriority(SDL_ThreadPriority
  */
 extern SDL_DECLSPEC void SDLCALL SDL_WaitThread(SDL_Thread *thread, int *status);
 
+/**
+ * Get the current state of a thread.
+ *
+ * \param thread the thread whose status you want to check.
+ * \returns the current state of a thread as defined in the SDL_ThreadState enum.
+ *
+ * \since This function is available since SDL 3.1.3.
+ * 
+ * \sa SDL_ThreadState
+ */
+extern SDL_DECLSPEC SDL_ThreadState SDLCALL SDL_GetThreadState(SDL_Thread *thread);
+
 /**
  * Let a thread clean up on exit without intervention.
  *

+ 1 - 0
src/dynapi/SDL_dynapi.sym

@@ -1229,6 +1229,7 @@ SDL3_0.0.0 {
     SDL_GetTrayEntryParent;
     SDL_GetTrayMenuParentEntry;
     SDL_GetTrayMenuParentTray;
+    SDL_GetThreadState;
     # extra symbols go here (don't modify this line)
   local: *;
 };

+ 1 - 0
src/dynapi/SDL_dynapi_overrides.h

@@ -1254,3 +1254,4 @@
 #define SDL_GetTrayEntryParent SDL_GetTrayEntryParent_REAL
 #define SDL_GetTrayMenuParentEntry SDL_GetTrayMenuParentEntry_REAL
 #define SDL_GetTrayMenuParentTray SDL_GetTrayMenuParentTray_REAL
+#define SDL_GetThreadState SDL_GetThreadState_REAL

+ 1 - 0
src/dynapi/SDL_dynapi_procs.h

@@ -1262,3 +1262,4 @@ SDL_DYNAPI_PROC(void,SDL_DestroyTray,(SDL_Tray *a),(a),)
 SDL_DYNAPI_PROC(SDL_TrayMenu*,SDL_GetTrayEntryParent,(SDL_TrayEntry *a),(a),return)
 SDL_DYNAPI_PROC(SDL_TrayEntry*,SDL_GetTrayMenuParentEntry,(SDL_TrayMenu *a),(a),return)
 SDL_DYNAPI_PROC(SDL_Tray*,SDL_GetTrayMenuParentTray,(SDL_TrayMenu *a),(a),return)
+SDL_DYNAPI_PROC(SDL_ThreadState,SDL_GetThreadState,(SDL_Thread *a),(a),return)

+ 5 - 0
src/thread/SDL_thread.c

@@ -456,6 +456,11 @@ void SDL_WaitThread(SDL_Thread *thread, int *status)
     }
 }
 
+SDL_ThreadState SDL_GetThreadState(SDL_Thread *thread)
+{
+    return (SDL_ThreadState)SDL_GetAtomicInt(&thread->state);
+}
+
 void SDL_DetachThread(SDL_Thread *thread)
 {
     if (!thread) {

+ 0 - 8
src/thread/SDL_thread_c.h

@@ -44,14 +44,6 @@
 #endif
 #include "../SDL_error_c.h"
 
-typedef enum SDL_ThreadState
-{
-    SDL_THREAD_STATE_ALIVE,
-    SDL_THREAD_STATE_DETACHED,
-    SDL_THREAD_STATE_ZOMBIE,
-    SDL_THREAD_STATE_CLEANED,
-} SDL_ThreadState;
-
 // This is the system-independent thread info structure
 struct SDL_Thread
 {