Mic*_*ley 14 c++ windows winapi multithreading unmanaged
我知道在Windows下设置线程名称的非直观过程(请参阅" 如何将名称设置为Win32线程? ").有没有办法获得线程的名称?我没有看到任何允许我这样做的Windows API(http://msdn.microsoft.com/en-us/library/windows/desktop/ms684847 ( v=vs.85 ) .aspx).
Ana*_*tts 17
线程实际上在Win32中没有名称.进程via RaiseException只是VS Debugger的"秘密握手",它实际上存储了TID => Name映射.Windows本身没有线程"名称"的概念.
Chr*_*ris 12
没有这样的WinAPI调用,因为不存在线程名称这样的东西.
如果设置了线程名称,那么IDE的调试器将为您存储它,这使得调试更容易.但是,该名称永远不会通过Windows API调用真正附加到该线程.
如果在没有调试器的情况下运行应用程序,则设置线程名称无效,因此无法检索名称.
即使它是可访问的 - 我也不会编写仅适用于附加调试器的代码.更好地将名称与手柄一起存储起来.
Mic*_*ley 12
从Windows 10版本1607开始,您现在可以获取线程的名称GetThreadDescription(),假设SetThreadDescription()用于设置线程的名称.
这是一个例子:
HRESULT hr = GetThreadDescription(ThreadHandle, &data);
if (SUCCEEDED(hr))
{
wprintf(“%ls\m”, data);
LocalFree(data);
}
Run Code Online (Sandbox Code Playgroud)
这是文档:
https://msdn.microsoft.com/en-us/library/windows/desktop/mt774972(v=vs.85).aspx