如何获得Win32线程的名称?

我知道在Windows下设置线程名称的非直观过程(请参阅“ 如何将名称设置为Win32线程? ”)。 有没有办法获得线程的名称? 我没有看到任何Windows API允许我这样做( http://msdn.microsoft.com/en-us/library/windows/desktop/ms684847(v=vs.85).aspx )。

Solutions Collecting From Web of "如何获得Win32线程的名称?"

没有这样的WinAPI调用,因为不存在线程名称之类的东西。

如果您设置了一个线程名称,那么您的IDE的调试器将会为您存储它,这使得它更易于调试。 然而,这个名字从来没有真正的附加到Windows API调用的线程。

如果在没有调试器的情况下运行应用程序,则设置线程名称不起作用,因此无法检索该名称。

即使它是可访问的 – 我不会写代码仅适用于附加的调试器。 最好把自己的名字和把手一起存放起来。

线程在Win32中实际上并不具有名称。 通过RaiseException的过程只是VS调试器的一个“秘密握手”,他实际上存储了TID =>名称映射。 Windows本身没有线程“名称”的概念。

从Windows 10版本1607开始,现在可以使用GetThreadDescription()来获取线程的名称,假定使用SetThreadDescription()来设置线程的名称。

这是一个例子:

 HRESULT hr = GetThreadDescription(ThreadHandle, &data); if (SUCCEEDED(hr)) { wprintf(“%ls\m”, data); LocalFree(data); } 

这里是文档:

https://msdn.microsoft.com/en-us/library/windows/desktop/mt774972(v=vs.85).aspx