如何获取Win32线程的名称
How to get the name of a Win32 Thread?
我知道在Windows下设置线程名称的非直观过程(请参阅"如何将名称设置为Win32线程?")。有没有办法得到线程的名称?我看不到任何允许我执行此操作的Windows API(http://msdn.microsoft.com/en-us/library/windows/desktop/ms684847(v=vs.85).aspx).
线程在Win32中实际上没有名称。通过RaiseException
的过程只是与VS调试器的"秘密握手",后者实际上存储TID=>Name映射。Windows本身没有线程"名称"的概念。
从Windows 10版本1607开始,您现在可以使用GetThreadDescription()
获取线程的名称,假设SetThreadDescription()
用于设置线程的名称。
这里有一个例子:
HRESULT hr = GetThreadDescription(ThreadHandle, &data);
if (SUCCEEDED(hr))
{
wprintf(“%lsm”, data);
LocalFree(data);
}
这是文档:
https://msdn.microsoft.com/en-us/library/windows/desktop/mt774972(v=vs.85).aspx
没有这样的WinAPI调用,因为不存在线程名称。
如果您设置了一个线程名称,那么IDE的调试器将为您存储它,这将使调试更加容易。然而,该名称从未通过windows API调用真正附加到线程。
如果在没有调试器的情况下运行应用程序,那么设置线程名称将无效,因此无法检索名称。
即使它是可访问的,我也不会编写只与调试器连接的代码。最好将名称与句柄一起保存。
相关文章:
- C++线程:如何在一个线程仍在运行时阻止另一个线程执行 (Win32)
- 一个简单的 win32 多线程代码.这能行吗?
- 在 Win32 API 中使用多线程
- 如何使用 Win32 API 从 Excel VBA 中的非"Single-Threaded Apartment"线程调用 InternetGetProxyInfo
- 安全地退出程序 Win32 C++从分离的 std::线程
- win32程序应该始终是多线程的吗
- win32 标准::线程泄漏内存
- 在使用Win32线程模型时,MinGW-w64是否支持开箱即用的std::线程
- 如何使用 Win32 API 获取任何线程的堆栈大小和堆栈限制
- Win32 控制台代码在哪里运行?从多个线程使用时控制台挂起
- 如何使用win32从多线程上下文初始化线程基元
- C++Win32 在低优先级模式下运行应用程序/线程
- C++/Win32 我在 Windows 2000+ 上启动线程的最佳方式
- 使用本机windows API实现win32线程安全队列
- C ++如何使用Win32 API通过线程从文本框获取文本
- 对 win32 线程使用不同的静态库内存
- 信号量无法阻止 Win32 控制台应用中的线程
- 仅使用 Win32 API 的线程屏障类
- 如何从win32进程中获取线程句柄列表
- 多线程Win32 c++程序在多线程中使用try/catch时会崩溃