C++ 如何获取Win32线程的名称?
我知道在Windows下设置线程名称的非直观过程(请参阅“”)。有没有办法获取线程的名称?我没有看到任何Windows API允许我这么做()。没有这样的WinAPI调用,因为不存在线程名称 如果您设置了线程名称,那么IDE的调试器将为您存储它,这使得调试更容易。 但是,windows API调用从未真正将该名称附加到线程 如果在没有调试器的情况下运行应用程序,则设置线程名称无效,因此无法检索该名称C++ 如何获取Win32线程的名称?,c++,windows,multithreading,winapi,unmanaged,C++,Windows,Multithreading,Winapi,Unmanaged,我知道在Windows下设置线程名称的非直观过程(请参阅“”)。有没有办法获取线程的名称?我没有看到任何Windows API允许我这么做()。没有这样的WinAPI调用,因为不存在线程名称 如果您设置了线程名称,那么IDE的调试器将为您存储它,这使得调试更容易。 但是,windows API调用从未真正将该名称附加到线程 如果在没有调试器的情况下运行应用程序,则设置线程名称无效,因此无法检索该名称 即使它是可访问的——我也不会编写只与附加的调试器一起工作的代码。最好将自己的名称与句柄一起存储。
即使它是可访问的——我也不会编写只与附加的调试器一起工作的代码。最好将自己的名称与句柄一起存储。线程在Win32中实际上没有名称。通过
RaiseException
的过程只是与VS调试器的“秘密握手”,VS调试器实际存储TID=>Name映射。Windows本身没有线程“名称”的概念 从Windows 10版本1607开始,现在可以使用GetThreadDescription()
获取线程的名称,前提是使用SetThreadDescription()
设置线程的名称
下面是一个例子:
HRESULT hr = GetThreadDescription(ThreadHandle, &data);
if (SUCCEEDED(hr))
{
wprintf(“%ls\m”, data);
LocalFree(data);
}
以下是文档:
如果线程的启动函数名对您有任何帮助,您可以获取它。@Nawaz您将如何做到这一点?@CS.:您必须使用这些API:和。我已经用过了,请看这个主题:你是说根本没有办法获得你在调试器中设置的线程名吗?我想在我的代码中加入一些调试检查,以确保它是从正确的线程调用的,使用线程名线程0x66c已退出,代码为0(0x0)->我想,也许0x66c类似于一个名称?