c++ - 是否可以命名CWinThread线程?

  显示原文与译文双语对照的内容
0 0

我有一个 C++ 应用程序( VS2008 ),并且我启动了这样的线程:


CWinThread *myThread= AfxBeginThread(myOp,0);

现在我要做的就是命名这个线程,以便在调试时识别它。

这听起来像一个简单的任务,但我找不到它的方法。 这是可能的,如果是,如何?

时间: 原作者:

0 0

这可以相对轻松地完成,如 MSDN上的文档所示: 如何在本机代码中设置线程名称。

基本上你发送调试器魔法异常包含名称和线程id,然后调试器跟踪并显示你发送它的名称。

MSDN文章中的示例代码包括如下:


//
//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)
 {
 }
}

原作者:
...