首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何为Win32线程设置名称?

如何为Win32线程设置名称?
EN

Stack Overflow用户
提问于 2009-05-25 08:32:04
回答 8查看 23K关注 0票数 21

如何为Win32线程设置名称。我没有找到任何Win32应用程序接口来实现同样的功能。基本上,我想在日志文件中添加线程名称。TLS (线程本地存储)是唯一的方法吗?

EN

回答 8

Stack Overflow用户

发布于 2009-05-25 08:36:51

这有帮助吗?How to: Set a Thread Name in Native Code

在托管代码中,只需设置相应Thread对象的Name属性即可。

票数 30
EN

Stack Overflow用户

发布于 2012-04-28 22:44:11

http://msdn.microsoft.com/en-us/library/xcb2z8hs(VS.90).aspx

//
// Usage: SetThreadName (-1, "MainThread");
//
#include <windows.h>
const DWORD MS_VC_EXCEPTION=0x406D1388;

#pragma pack(push,8)
typedef struct tagTHREADNAME_INFO
{
   DWORD dwType; // Must be 0x1000.
   LPCSTR szName; // Pointer to name (in user addr space).
   DWORD dwThreadID; // Thread ID (-1=caller thread).
  DWORD dwFlags; // Reserved for future use, must be zero.
} THREADNAME_INFO;
#pragma pack(pop)

void SetThreadName( DWORD dwThreadID, char* threadName)
{
   THREADNAME_INFO info;
   info.dwType = 0x1000;
   info.szName = threadName;
   info.dwThreadID = dwThreadID;
   info.dwFlags = 0;

   __try
   {
      RaiseException( MS_VC_EXCEPTION, 0, sizeof(info)/sizeof(ULONG_PTR),       (ULONG_PTR*)&info );
  }
  __except(EXCEPTION_EXECUTE_HANDLER)
  {
  }
}
票数 23
EN

Stack Overflow用户

发布于 2017-05-04 23:23:37

根据与微软调试团队领导的讨论(请参阅下面的链接以了解详细信息),SetThreadDescription应用程序接口是微软未来将使用的API,用于在本机代码中正式支持线程命名。我所说的“正式”是指MS支持的用于命名线程的API,而不是当前仅当进程在Visual Studio中运行时才有效的抛出异常的技巧。

此API从Windows 10版本1607开始可用。

但是,目前对工具的支持非常少,因此您设置的名称在Visual Studio或WinDbg调试器中不可见。然而,截至2017年4月,Microsoft xperf/WPA工具确实支持它(通过此API命名的线程将在这些工具中正确显示其名称)。

如果你想看到它获得更好的支持,比如在WinDbg、Visual Studio和崩溃转储文件中,请使用以下链接投票支持它:

https://visualstudio.uservoice.com/forums/121579-visual-studio-ide/suggestions/17608120-properly-support-native-thread-naming-via-the-sett

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/905876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档