Quote:
Originally Posted by MXL
It is unmanaged C++ and I am using AfxBeginThread to start the worker threads. I have 100's of threads running and it would be nice to scan the threads window and look at the names to determine which thread it is.
|
This is from the Visual Studio .NET documentation:
Quote:
This is for Unmanaged C/C++ only. To set a thread name in your program, use the SetThreadName function, as shown in the following example:
//
// Usage: SetThreadName (-1, "MainThread");
//
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;
void SetThreadName( DWORD dwThreadID, LPCSTR szThreadName)
{
THREADNAME_INFO info;
info.dwType = 0x1000;
info.szName = szThreadName;
info.dwThreadID = dwThreadID;
info.dwFlags = 0;
__try
{
RaiseException( 0x406D1388, 0, sizeof(info)/sizeof(DWORD), (DWORD*)&info );
}
except(EXCEPTION_CONTINUE_EXECUTION)
{
}
}
|
So with that code and assuming it still works with Dev Studio 2003.NET (if the RaiseException breaks or something, look for SetThreadName in the index of your docs), just do
CWinThread * pThread = AfxBeginThread(...);
SetThreadName(pThread->m_nThreadID, "Foo");
edit: fixed a typo in the doc: the line
info.dwThreadID = dwThreadID;
was originally
info.dwThreadID = dwThread;
but that's obviously a compiler error since there is no variable dwThread.