我知道在Windows下设置线程名称的非直观过程(请参阅“How to set name to a Win32 Thread?”)。有没有办法获得线程的名称?我没有看到任何允许我这样做的Windows API(http://msdn.microsoft.com/en-us/library/windows/desktop/ms684847(v=vs.85).aspx)。如何获取Win32线程的名称?
13
A
回答
12
有,因为不存在这样的东西线程的名字没有这样的WinAPI的电话。
如果您设置线程名字,那么你的IDE将它保存为你,这使得它更容易调试的调试器。 但是,这个名称从来没有真正通过Windows API调用附加到线程。
如果你没有一个调试器,然后设置线程名运行你的应用程序没有任何影响,因此,你不能检索名称。
即使这将是访问 - 我不会写,只有上附加一个调试运行的代码。最好将自己的名字与手柄一起储存起来。
17
线程在Win32中实际上没有名称。通过RaiseException
的过程只是与VS调试器的“秘密握手”,他实际上存储了TID =>名称映射。 Windows本身没有线程“名称”的概念。
7
从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
相关问题
- 1. Win32 C++如何获取当前应用程序服务名称
- 2. 获取鼠标悬停的名称(win32)
- 3. 如何获取所有线程ID和进程的名称
- 4. 如何从c#使用win32获取可访问的名称?
- 5. 如何使用Win32 Handle获取C++文件的名称?
- 6. 如何将名称设置为Win32线程?
- 7. 从进程ID获取进程名称(win32)
- 8. 如何获得Hogging线程名称WLST
- 9. 如何获取我的线程的语言环境名称?
- 10. 从ThreadID获取线程名称
- 11. 使用ThreadPoolExecutor,如何获取在线程池中运行的线程的名称?
- 12. 如何从其名称/ ID获取线程的实例?
- 13. 如何在执行之前获取AsyncTask的线程名称?
- 14. 如何获取当前线程的名称?
- 15. 如何在OpenGL或Win32中获取图形卡型号名称?
- 16. 如何获得固定线程池中线程的名称
- 17. 如何通过知道线程ID来获取线程的名称?
- 18. 如何从win32进程获取线程句柄列表?
- 19. 如何从进程名称获取应用程序名称?
- 20. 如何在Java中获取线程名称?
- 21. Python线程 - 如何获取父ID /名称
- 22. 如何在Java中正确获取线程名称?
- 23. 如何从父级获取线程名称?
- 24. 如何获取驱动程序名称?
- 25. 如何获取APN名称
- 26. 获取在线用户的名称
- 27. 从不同的进程中获取线程名称
- 28. 名称线程
- 29. SharpPcap获取进程名称
- 30. 获取程序集名称
你可以得到线程的启动函数名称,如果可以帮助您以任何方式。 – Nawaz 2012-02-20 19:26:07
@Nawaz你会怎么做? – 2012-08-09 11:57:48
@CS .:您必须使用这些API:[SymInitialize](http://msdn.microsoft.com/en-us/library/windows/desktop/ms681351%28v=vs.85%29.aspx)和[SymFromAddr](http://msdn.microsoft.com/en-us/library/windows/desktop/ms681323%28v=vs.85%29.aspx)。我使用它们,请参阅本主题:从另一个进程中取得的Win32线程的StartAddress(http://stackoverflow.com/questions/8679406/get-startaddress-of-win32-thread-from-another-process) – Nawaz 2012-08-09 12:29:24