From 8f07f5f7a921cd87437eb3a0fe76cf85d5258680 Mon Sep 17 00:00:00 2001 From: Richard Gale Date: Sun, 23 Aug 2015 15:08:30 -0700 Subject: [PATCH] Add function to set thread name Naming a thread is useful when debugging multi-threaded applications. --- include/bx/config.h | 12 ++++++++++++ include/bx/thread.h | 22 ++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/include/bx/config.h b/include/bx/config.h index 9a439f9..5ded70f 100644 --- a/include/bx/config.h +++ b/include/bx/config.h @@ -43,4 +43,16 @@ # define BX_CONFIG_SUPPORTS_THREADING !(BX_PLATFORM_EMSCRIPTEN) #endif // BX_CONFIG_SUPPORTS_THREADING +#ifndef BX_CONFIG_THREAD_NAME_LENGTH +# if BX_PLATFORM_WINDOWS +# define BX_CONFIG_THREAD_NAME_LENGTH 256 +# elif BX_PLATFORM_OSX|BX_PLATFORM_IOS +# define BX_CONFIG_THREAD_NAME_LENGTH 64 +# elif BX_PLATFORM_POSIX +# define BX_CONFIG_THREAD_NAME_LENGTH 16 +# else +# define BX_CONFIG_THREAD_NAME_LENGTH 0 +# endif +#endif + #endif // BX_CONFIG_H_HEADER_GUARD diff --git a/include/bx/thread.h b/include/bx/thread.h index 331aeaf..f8cb9db 100644 --- a/include/bx/thread.h +++ b/include/bx/thread.h @@ -139,6 +139,27 @@ namespace bx return m_exitCode; } + void setThreadName(const char* name) + { + if (name != NULL) + { + strncpy(m_name, name, BX_CONFIG_THREAD_NAME_LENGTH); + } + else + { + memset(m_name, 0, BX_CONFIG_THREAD_NAME_LENGTH); + } + +#if BX_PLATFORM_WINDOWS +#elif BX_PLATFORM_OSX|BX_PLATFORM_IOS + strncpy(m_name, name, BX_CONFIG_THREAD_NAME_LENGTH); + pthread_setname_np(m_name); +#elif BX_PLATFORM_POSIX + strncpy(m_name, name, BX_CONFIG_THREAD_NAME_LENGTH); + pthread_setname_np(m_handle, m_name); +#endif // BX_PLATFORM_ + } + private: int32_t entry() { @@ -179,6 +200,7 @@ namespace bx uint32_t m_stackSize; int32_t m_exitCode; bool m_running; + char m_name[BX_CONFIG_THREAD_NAME_LENGTH]; }; #if BX_PLATFORM_WINDOWS