Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added function to check the state of a thread #11717

Merged
merged 1 commit into from
Dec 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions include/SDL3/SDL_thread.h
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*
Expand Down Expand Up @@ -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.
*
Expand Down
1 change: 1 addition & 0 deletions src/dynapi/SDL_dynapi.sym
Original file line number Diff line number Diff line change
Expand Up @@ -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 change: 1 addition & 0 deletions src/dynapi/SDL_dynapi_overrides.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 change: 1 addition & 0 deletions src/dynapi/SDL_dynapi_procs.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 changes: 5 additions & 0 deletions src/thread/SDL_thread.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
8 changes: 0 additions & 8 deletions src/thread/SDL_thread_c.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand Down
Loading