set thread name for Windows (#57)
This commit is contained in:
		
				
					committed by
					
						 Benjamin Sergeant
						Benjamin Sergeant
					
				
			
			
				
	
			
			
			
						parent
						
							2e4c4b72b6
						
					
				
				
					commit
					2732dfd0f1
				
			| @@ -5,12 +5,41 @@ | ||||
|  */ | ||||
| #include "../IXSetThreadName.h" | ||||
| #include <iostream> | ||||
| #include <Windows.h> | ||||
|  | ||||
| namespace ix | ||||
| { | ||||
|     const DWORD MS_VC_EXCEPTION = 0x406D1388; | ||||
|  | ||||
| #pragma pack(push,8) | ||||
|     typedef struct tagTHREADNAME_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. | ||||
|     } THREADNAME_INFO; | ||||
| #pragma pack(pop) | ||||
|  | ||||
|     void SetThreadName(DWORD dwThreadID, const char* threadName) | ||||
|     { | ||||
|         THREADNAME_INFO info; | ||||
|         info.dwType = 0x1000; | ||||
|         info.szName = threadName; | ||||
|         info.dwThreadID = dwThreadID; | ||||
|         info.dwFlags = 0; | ||||
|  | ||||
|         __try | ||||
|         { | ||||
|             RaiseException(MS_VC_EXCEPTION, 0, sizeof(info) / sizeof(ULONG_PTR), (ULONG_PTR*)& info); | ||||
|         } | ||||
|         __except (EXCEPTION_EXECUTE_HANDLER) | ||||
|         { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     void setThreadName(const std::string& name) | ||||
|     { | ||||
|         // FIXME | ||||
|         std::cerr << "setThreadName not implemented on Windows yet" << std::endl; | ||||
|         SetThreadName(-1, name.c_str()); | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user