show thread names in the VC debugger

This commit is contained in:
Glenn Maynard
2004-09-17 02:36:04 +00:00
parent fcfaa2a303
commit 00b2d18a8e
@@ -57,10 +57,37 @@ int ThreadImpl_Win32::Wait()
return ret;
}
/* SetThreadName magic comes from VirtualDub. */
#define MS_VC_EXCEPTION 0x406d1388
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;
static void SetThreadName( DWORD dwThreadID, LPCTSTR szThreadName )
{
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), (ULONG_PTR *)&info);
} __except (EXCEPTION_CONTINUE_EXECUTION) {
}
}
static DWORD WINAPI StartThread( LPVOID pData )
{
ThreadImpl_Win32 *pThis = (ThreadImpl_Win32 *) pData;
SetThreadName( GetCurrentThreadId(), RageThread::GetCurThreadName() );
DWORD ret = (DWORD) pThis->m_pFunc( pThis->m_pData );
for( int i = 0; i < MAX_THREADS; ++i )
@@ -99,6 +126,8 @@ ThreadImpl *MakeThisThread()
{
ThreadImpl_Win32 *thread = new ThreadImpl_Win32;
SetThreadName( GetCurrentThreadId(), RageThread::GetCurThreadName() );
const HANDLE CurProc = GetCurrentProcess();
int ret = DuplicateHandle( CurProc, GetCurrentThread(), CurProc,
&thread->ThreadHandle, 0, false, DUPLICATE_SAME_ACCESS );