Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何获取Win32线程的名称?_C++_Windows_Multithreading_Winapi_Unmanaged - Fatal编程技术网

C++ 如何获取Win32线程的名称?

C++ 如何获取Win32线程的名称?,c++,windows,multithreading,winapi,unmanaged,C++,Windows,Multithreading,Winapi,Unmanaged,我知道在Windows下设置线程名称的非直观过程(请参阅“”)。有没有办法获取线程的名称?我没有看到任何Windows API允许我这么做()。没有这样的WinAPI调用,因为不存在线程名称 如果您设置了线程名称,那么IDE的调试器将为您存储它,这使得调试更容易。 但是,windows API调用从未真正将该名称附加到线程 如果在没有调试器的情况下运行应用程序,则设置线程名称无效,因此无法检索该名称 即使它是可访问的——我也不会编写只与附加的调试器一起工作的代码。最好将自己的名称与句柄一起存储。

我知道在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类似于一个名称?