1#ifndef SDL3PP_THREAD_H_
2#define SDL3PP_THREAD_H_
4#include <SDL3/SDL_thread.h>
5#include "SDL3pp_atomic.h"
6#include "SDL3pp_properties.h"
7#include "SDL3pp_stdinc.h"
58 constexpr explicit operator bool()
const {
return !!
value; }
83 SDL_THREAD_PRIORITY_NORMAL;
86 SDL_THREAD_PRIORITY_HIGH;
89 SDL_THREAD_PRIORITY_TIME_CRITICAL;
180 constexpr Thread(std::nullptr_t =
nullptr) noexcept
193 : m_resource(resource)
244 : m_resource(
CheckError(SDL_CreateThread(fn, name, data)))
311 : m_resource(
CheckError(SDL_CreateThreadWithProperties(props)))
321 std::swap(m_resource, other.m_resource);
337 m_resource =
nullptr;
345 constexpr explicit operator bool() const noexcept {
return !!m_resource; }
348 constexpr operator ThreadParam() const noexcept {
return {m_resource}; }
454 void Wait(
int* status);
553 return Thread(fn, std::move(name), data);
623namespace prop::thread {
625constexpr auto CREATE_ENTRY_FUNCTION_POINTER =
626 SDL_PROP_THREAD_CREATE_ENTRY_FUNCTION_POINTER;
628constexpr auto CREATE_NAME_STRING = SDL_PROP_THREAD_CREATE_NAME_STRING;
630constexpr auto CREATE_USERDATA_POINTER =
631 SDL_PROP_THREAD_CREATE_USERDATA_POINTER;
633constexpr auto CREATE_STACKSIZE_NUMBER =
634 SDL_PROP_THREAD_CREATE_STACKSIZE_NUMBER;
649 return SDL_GetThreadName(thread);
692 return SDL_GetThreadID(thread);
711 CheckError(SDL_SetCurrentThreadPriority(priority));
753 SDL_WaitThread(thread, status);
771 return SDL_GetThreadState(thread);
860 CheckError(SDL_SetTLS(
id, value, destructor));
Helpers to use C++ strings parameters.
Definition: SDL3pp_strings.h:43
The SDL thread object.
Definition: SDL3pp_thread.h:175
Thread(ThreadCB fn, StringParam name)
Default ctor.
Definition: SDL3pp_thread.h:211
constexpr auto operator<=>(const Thread &other) const noexcept=default
Comparison.
constexpr Thread(const ThreadRaw resource) noexcept
Constructs from ThreadParam.
Definition: SDL3pp_thread.h:192
constexpr Thread(std::nullptr_t=nullptr) noexcept
Default ctor.
Definition: SDL3pp_thread.h:180
constexpr Thread & operator=(Thread &&other) noexcept
Assignment operator.
Definition: SDL3pp_thread.h:319
constexpr ThreadRaw release() noexcept
Retrieves underlying ThreadRaw and clear this.
Definition: SDL3pp_thread.h:334
Thread(ThreadFunction fn, StringParam name, void *data)
Create a new thread with a default stack size.
Definition: SDL3pp_thread.h:243
~Thread()
Destructor.
Definition: SDL3pp_thread.h:316
Thread(PropertiesParam props)
Create a new thread with with the specified properties.
Definition: SDL3pp_thread.h:310
constexpr Thread(Thread &&other) noexcept
Move constructor.
Definition: SDL3pp_thread.h:201
constexpr ThreadRaw get() const noexcept
Retrieves underlying ThreadRaw.
Definition: SDL3pp_thread.h:331
constexpr Thread & operator=(const Thread &other) noexcept=default
Assignment operator.
constexpr Thread(const Thread &other)=delete
Copy constructor.
constexpr void CheckError(bool result)
Check and throw if returned value from SDL is an error.
Definition: SDL3pp_error.h:197
constexpr ThreadPriority THREAD_PRIORITY_HIGH
HIGH.
Definition: SDL3pp_thread.h:85
ThreadState GetThreadState(ThreadParam thread)
Get the current state of a thread.
Definition: SDL3pp_thread.h:769
void CleanupTLS()
Cleanup all TLS data for this thread.
Definition: SDL3pp_thread.h:874
constexpr ThreadPriority THREAD_PRIORITY_TIME_CRITICAL
TIME_CRITICAL.
Definition: SDL3pp_thread.h:88
constexpr ThreadState THREAD_DETACHED
The thread is detached and can't be waited on.
Definition: SDL3pp_thread.h:108
const char * GetName() const
Get the thread name as it was specified in Thread.Thread().
Definition: SDL3pp_thread.h:652
int(SDLCALL *)(void *data) ThreadFunction
The function passed to Thread.Thread() as the new thread's entry point.
Definition: SDL3pp_thread.h:136
void(SDLCALL *)(void *value) TLSDestructorCallback
The callback used to cleanup data passed to SetTLS.
Definition: SDL3pp_thread.h:160
Thread CreateThreadWithProperties(PropertiesParam props)
Create a new thread with with the specified properties.
Definition: SDL3pp_thread.h:618
void DetachThread(ThreadRaw thread)
Let a thread clean up on exit without intervention.
Definition: SDL3pp_thread.h:812
constexpr ThreadState THREAD_ALIVE
The thread is currently running.
Definition: SDL3pp_thread.h:105
constexpr ThreadPriority THREAD_PRIORITY_LOW
LOW.
Definition: SDL3pp_thread.h:80
void SetCurrentThreadPriority(ThreadPriority priority)
Set the priority for the current thread.
Definition: SDL3pp_thread.h:709
ThreadID GetThreadID(ThreadParam thread)
Get the thread identifier for the specified thread.
Definition: SDL3pp_thread.h:690
SDL_ThreadState ThreadState
The SDL thread state.
Definition: SDL3pp_thread.h:100
const char * GetThreadName(ThreadParam thread)
Get the thread name as it was specified in Thread.Thread().
Definition: SDL3pp_thread.h:647
std::function< int()> ThreadCB
The function passed to Thread.Thread() as the new thread's entry point.
Definition: SDL3pp_thread.h:147
ThreadID GetCurrentThreadID()
Get the thread identifier for the current thread.
Definition: SDL3pp_thread.h:673
constexpr ThreadState THREAD_UNKNOWN
The thread is not valid.
Definition: SDL3pp_thread.h:102
SDL_ThreadPriority ThreadPriority
The SDL thread priority.
Definition: SDL3pp_thread.h:78
void Detach()
Let a thread clean up on exit without intervention.
Definition: SDL3pp_thread.h:814
static void SetCurrentPriority(ThreadPriority priority)
Set the priority for the current thread.
Definition: SDL3pp_thread.h:714
SDL_ThreadID ThreadID
A unique numeric ID that identifies a thread.
Definition: SDL3pp_thread.h:126
void Wait(int *status)
Wait for a thread to finish.
Definition: SDL3pp_thread.h:756
Thread CreateThread(ThreadFunction fn, StringParam name, void *data)
Create a new thread with a default stack size.
Definition: SDL3pp_thread.h:551
ThreadID GetID() const
Get the thread identifier for the specified thread.
Definition: SDL3pp_thread.h:695
SDL_Thread * ThreadRaw
Alias to raw representation for Thread.
Definition: SDL3pp_thread.h:35
void SetTLS(TLSID *id, const void *value, TLSDestructorCallback destructor)
Set the current thread's value associated with a thread local storage ID.
Definition: SDL3pp_thread.h:856
constexpr ThreadPriority THREAD_PRIORITY_NORMAL
NORMAL.
Definition: SDL3pp_thread.h:82
ThreadState GetState() const
Get the current state of a thread.
Definition: SDL3pp_thread.h:774
constexpr ThreadState THREAD_COMPLETE
The thread has finished and should be cleaned up with Thread.Wait()
Definition: SDL3pp_thread.h:112
void * GetTLS(TLSID *id)
Get the current thread's value associated with a thread local storage ID.
Definition: SDL3pp_thread.h:829
void WaitThread(ThreadParam thread, int *status)
Wait for a thread to finish.
Definition: SDL3pp_thread.h:751
Main include header for the SDL3pp library.
A type representing an atomic integer value.
Definition: SDL3pp_atomic.h:216
Safely wrap Properties for non owning parameters.
Definition: SDL3pp_properties.h:52
Safely wrap Thread for non owning parameters.
Definition: SDL3pp_thread.h:42
constexpr auto operator<=>(const ThreadParam &other) const =default
Comparison.
constexpr ThreadParam(std::nullptr_t _=nullptr)
Constructs null/invalid.
Definition: SDL3pp_thread.h:52
ThreadRaw value
parameter's ThreadRaw
Definition: SDL3pp_thread.h:43
constexpr ThreadParam(ThreadRaw value)
Constructs from ThreadRaw.
Definition: SDL3pp_thread.h:46
Semi-safe reference for Thread.
Definition: SDL3pp_thread.h:471
~ThreadRef()
Destructor.
Definition: SDL3pp_thread.h:505
ThreadRef(const ThreadRef &other) noexcept
Copy constructor.
Definition: SDL3pp_thread.h:499
ThreadRef(ThreadRaw resource) noexcept
Constructs from ThreadParam.
Definition: SDL3pp_thread.h:493
ThreadRef(ThreadParam resource) noexcept
Constructs from ThreadParam.
Definition: SDL3pp_thread.h:481