我有一个使用"很多"线程的服务器应用程序.如果不想进入有关它应该使用多少线程的争论,那么能够在调试器"线程"窗口中看到描述每个线程的一些描述性文本,而不必点击它,从上下文确定它是什么.
它们都具有相同的起始地址,因此通常线程窗口会显示类似"thread_base :: start"或类似内容的内容.我想知道是否有API调用或允许我自定义该文本的东西.
这是我使用的代码.
这是一个头文件.
#pragma once #define MS_VC_EXCEPTION 0x406d1388 #pragma warning(disable: 6312) #pragma warning(disable: 6322) typedef struct tagTHREADNAME_INFO { DWORD dwType; // must be 0x1000 LPCSTR szName; // pointer to name (in same addr space) DWORD dwThreadID; // thread ID (-1 caller thread) DWORD dwFlags; // reserved for future use, most be zero } THREADNAME_INFO; inline void SetThreadName(DWORD dwThreadID, LPCSTR szThreadName) { #ifdef _DEBUG THREADNAME_INFO info; info.dwType = 0x1000; info.szName = szThreadName; info.dwThreadID = dwThreadID; info.dwFlags = 0; __try { RaiseException(MS_VC_EXCEPTION, 0, sizeof(info) / sizeof(DWORD), (DWORD *)&info); } __except (EXCEPTION_CONTINUE_EXECUTION) { } #else dwThreadID; szThreadName; #endif }
然后我在线程proc中调用它.
SetThreadName(GetCurrentThreadId(), "VideoSource Thread");
值得注意的是,这是大卫发布链接的确切代码(谢谢!我忘记了我得到它的地方).我没有删除这篇文章,因为如果MSDN决定重新组织其链接(我再次),我希望代码仍然可用.
使用SetThreadName