![]() |
1
0
您始终可以将这些信息存储在适当的数据结构中。使用哈希或映射将getThreadID()映射到此名称。由于getthreadid()始终是唯一的标识符,所以它工作得很好。 干杯!
你说得对。当一个线程死后,它在映射中的相应条目应该被自然删除。 |
![]() |
2
31
这有帮助吗? How to: Set a Thread Name in Native Code 在托管代码中,它与设置相应线程对象的名称属性一样简单。 |
![]() |
3
20
http://msdn.microsoft.com/en-us/library/xcb2z8hs(VS.90).aspx
|
![]() |
4
10
Win32线程没有名称。有一种微软的惯例,即应用程序引发包含线程名的特殊SEH异常。这些异常可以被调试程序截获并用于指示线程名。有几个答案可以说明这一点。 但是,所有这些都由调试器处理。线程本身是无名对象。因此,如果您想将名称与线程关联,就必须开发自己的机制。虽然您可以使用线程本地存储,但它只允许您从该线程中执行的代码中获取名称。因此,线程ID和名称之间的全局映射似乎是最自然和最有用的方法。 |
![]() |
5
4
可以使用线程本地存储对象来存储名称。例如,
然后你可以从一个线程中读写这个。这在记录器应用程序中可能很有用,在该应用程序中,您希望打印出每个消息的线程名称。您可能希望在线程启动时立即编写此变量,并引发Microsoft异常( https://stackoverflow.com/a/10364541/364818 )以便调试器也知道线程名。 |
![]() |
6
3
根据与微软调试团队领导的讨论(详情请参见下面的链接),sethreaddescription api是微软未来将使用的API,以支持在本机代码中正式命名线程。我所说的“正式”是指用于命名线程的MS支持的API,而不是当前的异常引发的hack,它目前只在Visual Studio中运行进程时工作。 此API从1607版Windows10开始提供。 但是,目前对工具的支持非常少,因此您设置的名称在Visual Studio或windbg调试器中不可见。但是,截至2017年4月,Microsoft Xperf/WPA工具确实支持它(通过此API命名的线程的名称将正确显示在这些工具中)。 如果您希望看到此功能获得更好的支持,例如在windbg、Visual Studio和崩溃转储文件中,请使用以下链接投票: |
![]() |
7
1
如果要在调试器(windbg或Visual Studio)中查看线程的名称: http://blogs.msdn.com/stevejs/archive/2005/12/19/505815.aspx 我不确定是否有相反的方法来获取线程名。但是,tls听起来像是一条路要走。 |
![]() |
8
1
另一种方法是在线程teb的arbitraryuserpointer字段中存储指向该名称的指针。这可以在运行时写入和读取。 有一篇题为 "Debugging With The Thread Information Block" 这向你展示了如何做到这一点。 |
![]() |
9
0
如果应用程序在Windows 1607+版本上运行,则可以使用 SetThreadDescription () |
|
vini · 安装wfp内核驱动程序后,devcon状态返回39 2 年前 |
![]() |
I101I · 如何镜像HBITMAP 2 年前 |
![]() |
E235 · 如何查看谁创建了Windows NamedPipe 2 年前 |
![]() |
Pizza Ãcke · 创建带有内存映像的Windows托盘图标 2 年前 |
![]() |
Jabu · 如何获取列表框滚动条“拇指”的高度? 2 年前 |
![]() |
tree1234 · 对可执行文件进行代码设计,并允许修改某些字节 2 年前 |
![]() |
Penachia · PDF FontDescriptor标志 6 年前 |