C++ 关于 线程名称

来源:互联网 发布:linux中启动tomcat 编辑:程序博客网 时间:2024/06/08 01:17

1、如何设置线程名称

为了给你的程序设置线程名称,可以使用以下函数:SetThreadName 。需要注意:线程名称被拷贝到线程的内存中,所以threadName参数可以被释放。


C++
//  // Usage: SetThreadName ((DWORD)-1, "MainThread");  //  #include <windows.h>  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;  #pragma warning(push)  #pragma warning(disable: 6320 6322)      __try{          RaiseException(MS_VC_EXCEPTION, 0, sizeof(info) / sizeof(ULONG_PTR), (ULONG_PTR*)&info);      }      __except (EXCEPTION_EXECUTE_HANDLER){      }  #pragma warning(pop)  }    

link: https://msdn.microsoft.com/en-us/library/xcb2z8hs.aspx

2、对于Windows 10, version 1607后版本,可以使用 SetThreadDescription GetThreadDescription 函数给线程关联名称
3、其实,线程名,只是用于调试器区别线程使用,可以自己通过线程id关联一个线程名称。