+namespace detail {\r
+\r
+typedef struct tagTHREADNAME_INFO\r
+{\r
+ DWORD dwType; // must be 0x1000\r
+ LPCSTR szName; // pointer to name (in user addr space)\r
+ DWORD dwThreadID; // thread ID (-1=caller thread)\r
+ DWORD dwFlags; // reserved for future use, must be zero\r
+} THREADNAME_INFO;\r
+\r
+inline void SetThreadName(DWORD dwThreadID, LPCSTR szThreadName)\r
+{\r
+ THREADNAME_INFO info;\r
+ {\r
+ info.dwType = 0x1000;\r
+ info.szName = szThreadName;\r
+ info.dwThreadID = dwThreadID;\r
+ info.dwFlags = 0;\r
+ }\r
+ __try\r
+ {\r
+ RaiseException( 0x406D1388, 0, sizeof(info)/sizeof(DWORD), (DWORD*)&info );\r
+ }\r
+ __except (EXCEPTION_CONTINUE_EXECUTION){} \r
+}\r
+\r
+}\r
+\r
+enum task_priority\r
+{\r
+ high_priority,\r
+ normal_priority,\r
+ priority_count\r
+};\r
+\r
+enum thread_priority\r
+{\r
+ high_priority_class,\r
+ above_normal_priority_class,\r
+ normal_priority_class,\r
+ below_normal_priority_class\r
+};\r
+\r