设置线程名称

//

// Usage: SetThreadName (-1, "MainThread");

//

#include <windows.h>

#define 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, char* threadName)

{

   Sleep(10);

   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)

   {

   }

}





转载至http://msdn.microsoft.com/en-us/library/xcb2z8hs.aspx