During my work adventures, I have the ‘fortune‘ of working with Windows threads. One thing that’s nice to have is a name for each thread so you can actually tell them apart. Turns out, there is no easy call to set a thread name.

However, there is an officially approved way to set a thread name:


//
// Usage: SetThreadName (-1, "MainThread");
//
typedef struct tagTHREADNAME_INFO
{
   DWORD dwType; // must be 0×1000
   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;

void SetThreadName( DWORD dwThreadID, LPCSTR szThreadName)
{
   THREADNAME_INFO info;
   info.dwType = 0×1000;
   info.szName = szThreadName;
   info.dwThreadID = dwThreadID;
   info.dwFlags = 0;

   __try
   {
      RaiseException( 0×406D1388,
    0, sizeof(info)/sizeof(DWORD),
    (DWORD*)&info );
   }
   except(EXCEPTION_CONTINUE_EXECUTION)
   {
   }
}
 

Who is the genius responsible for that idea???

Leave a reply