Merge pull request #11828 from liamwhite/setthreadescription
common: use SetThreadDescription API for thread names
This commit is contained in:
		| @@ -11,6 +11,7 @@ | |||||||
| #include <mach/mach.h> | #include <mach/mach.h> | ||||||
| #elif defined(_WIN32) | #elif defined(_WIN32) | ||||||
| #include <windows.h> | #include <windows.h> | ||||||
|  | #include "common/string_util.h" | ||||||
| #else | #else | ||||||
| #if defined(__Bitrig__) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__OpenBSD__) | #if defined(__Bitrig__) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__OpenBSD__) | ||||||
| #include <pthread_np.h> | #include <pthread_np.h> | ||||||
| @@ -82,29 +83,8 @@ void SetCurrentThreadPriority(ThreadPriority new_priority) { | |||||||
| #ifdef _MSC_VER | #ifdef _MSC_VER | ||||||
|  |  | ||||||
| // Sets the debugger-visible name of the current thread. | // Sets the debugger-visible name of the current thread. | ||||||
| // Uses trick documented in: |  | ||||||
| // https://docs.microsoft.com/en-us/visualstudio/debugger/how-to-set-a-thread-name-in-native-code |  | ||||||
| void SetCurrentThreadName(const char* name) { | void SetCurrentThreadName(const char* name) { | ||||||
|     static const DWORD MS_VC_EXCEPTION = 0x406D1388; |     SetThreadDescription(GetCurrentThread(), UTF8ToUTF16W(name).data()); | ||||||
|  |  | ||||||
| #pragma pack(push, 8) |  | ||||||
|     struct THREADNAME_INFO { |  | ||||||
|         DWORD dwType;     // must be 0x1000 |  | ||||||
|         LPCSTR szName;    // pointer to name (in user addr space) |  | ||||||
|         DWORD dwThreadID; // thread ID (-1=caller thread) |  | ||||||
|         DWORD dwFlags;    // reserved for future use, must be zero |  | ||||||
|     } info; |  | ||||||
| #pragma pack(pop) |  | ||||||
|  |  | ||||||
|     info.dwType = 0x1000; |  | ||||||
|     info.szName = name; |  | ||||||
|     info.dwThreadID = std::numeric_limits<DWORD>::max(); |  | ||||||
|     info.dwFlags = 0; |  | ||||||
|  |  | ||||||
|     __try { |  | ||||||
|         RaiseException(MS_VC_EXCEPTION, 0, sizeof(info) / sizeof(ULONG_PTR), (ULONG_PTR*)&info); |  | ||||||
|     } __except (EXCEPTION_CONTINUE_EXECUTION) { |  | ||||||
|     } |  | ||||||
| } | } | ||||||
|  |  | ||||||
| #else // !MSVC_VER, so must be POSIX threads | #else // !MSVC_VER, so must be POSIX threads | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user