diff --git a/common/TracySystem.cpp b/common/TracySystem.cpp index c893c92c..3cda186c 100644 --- a/common/TracySystem.cpp +++ b/common/TracySystem.cpp @@ -99,6 +99,29 @@ std::atomic& GetThreadNameData(); TRACY_API void InitRPMallocThread(); #endif +#ifdef _MSC_VER +# pragma pack( push, 8 ) +struct THREADNAME_INFO +{ + DWORD dwType; + LPCSTR szName; + DWORD dwThreadID; + DWORD dwFlags; +}; +# pragma pack(pop) + +void ThreadNameMsvcMagic( const THREADNAME_INFO& info ) +{ + __try + { + RaiseException( 0x406D1388, 0, sizeof(info)/sizeof(ULONG_PTR), (ULONG_PTR*)&info ); + } + __except(EXCEPTION_EXECUTE_HANDLER) + { + } +} +#endif + TRACY_API void SetThreadName( const char* name ) { #if defined _WIN32 || defined __CYGWIN__ @@ -112,31 +135,12 @@ TRACY_API void SetThreadName( const char* name ) else { # if defined _MSC_VER - const DWORD MS_VC_EXCEPTION=0x406D1388; -# pragma pack( push, 8 ) - struct THREADNAME_INFO - { - DWORD dwType; - LPCSTR szName; - DWORD dwThreadID; - DWORD dwFlags; - }; -# pragma pack(pop) - - DWORD ThreadId = GetCurrentThreadId(); THREADNAME_INFO info; info.dwType = 0x1000; info.szName = name; - info.dwThreadID = ThreadId; + info.dwThreadID = GetCurrentThreadId(); info.dwFlags = 0; - - __try - { - RaiseException( MS_VC_EXCEPTION, 0, sizeof(info)/sizeof(ULONG_PTR), (ULONG_PTR*)&info ); - } - __except(EXCEPTION_EXECUTE_HANDLER) - { - } + ThreadNameMsvcMagic( info ); # endif } #elif defined _GNU_SOURCE && !defined __EMSCRIPTEN__ && !defined __CYGWIN__