From 4a709128d02ac31e62b55d8d9a722c1e153f4553 Mon Sep 17 00:00:00 2001 From: Moritz Date: Wed, 25 Dec 2024 18:46:59 +0100 Subject: [PATCH] Added SDL_GetThreadState --- include/SDL3/SDL_thread.h | 31 +++++++++++++++++++++++++++++++ src/dynapi/SDL_dynapi.sym | 1 + src/dynapi/SDL_dynapi_overrides.h | 1 + src/dynapi/SDL_dynapi_procs.h | 1 + src/thread/SDL_thread.c | 5 +++++ src/thread/SDL_thread_c.h | 8 -------- 6 files changed, 39 insertions(+), 8 deletions(-) diff --git a/include/SDL3/SDL_thread.h b/include/SDL3/SDL_thread.h index 0eb481587f2d8..3e37c3180daf2 100644 --- a/include/SDL3/SDL_thread.h +++ b/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. * diff --git a/src/dynapi/SDL_dynapi.sym b/src/dynapi/SDL_dynapi.sym index 37a018e75f998..47ddb603d4150 100644 --- a/src/dynapi/SDL_dynapi.sym +++ b/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: *; }; diff --git a/src/dynapi/SDL_dynapi_overrides.h b/src/dynapi/SDL_dynapi_overrides.h index 9fa340a26b9b8..cf47d1c93caa4 100644 --- a/src/dynapi/SDL_dynapi_overrides.h +++ b/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 diff --git a/src/dynapi/SDL_dynapi_procs.h b/src/dynapi/SDL_dynapi_procs.h index eec6229fff699..01f6a4de1df2d 100644 --- a/src/dynapi/SDL_dynapi_procs.h +++ b/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) diff --git a/src/thread/SDL_thread.c b/src/thread/SDL_thread.c index e69462cb90a06..fcb11019c14fc 100644 --- a/src/thread/SDL_thread.c +++ b/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) { diff --git a/src/thread/SDL_thread_c.h b/src/thread/SDL_thread_c.h index c703e526212c8..f8b3fb8953f5e 100644 --- a/src/thread/SDL_thread_c.h +++ b/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 {