summaryrefslogtreecommitdiffstats
path: root/src/OSSupport/Thread.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/OSSupport/Thread.cpp')
-rw-r--r--src/OSSupport/Thread.cpp23
1 files changed, 15 insertions, 8 deletions
diff --git a/src/OSSupport/Thread.cpp b/src/OSSupport/Thread.cpp
index 3df75f0e7..7a10ef8d2 100644
--- a/src/OSSupport/Thread.cpp
+++ b/src/OSSupport/Thread.cpp
@@ -10,27 +10,34 @@
//
// Usage: SetThreadName (-1, "MainThread");
//
+
+// Code adapted from MSDN: http://msdn.microsoft.com/en-us/library/xcb2z8hs.aspx
+
+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
+ 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, LPCSTR szThreadName)
+static void SetThreadName(DWORD dwThreadID, const char * threadName)
{
THREADNAME_INFO info;
info.dwType = 0x1000;
- info.szName = szThreadName;
+ info.szName = threadName;
info.dwThreadID = dwThreadID;
info.dwFlags = 0;
__try
{
- RaiseException( 0x406D1388, 0, sizeof(info)/sizeof(DWORD), (DWORD*)&info );
+ RaiseException(MS_VC_EXCEPTION, 0, sizeof(info) / sizeof(ULONG_PTR), (ULONG_PTR *)&info);
}
- __except(EXCEPTION_CONTINUE_EXECUTION)
+ __except (EXCEPTION_EXECUTE_HANDLER)
{
}
}