1
0

Added thread names to cThread so when debugging in Visual Studio you actually know what thread you're looking at

git-svn-id: http://mc-server.googlecode.com/svn/trunk@100 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
faketruth 2011-12-23 14:26:29 +00:00
parent 24efa6f864
commit aa392170a2
5 changed files with 55 additions and 9 deletions

View File

@ -159,8 +159,8 @@ cClientHandle::cClientHandle(const cSocket & a_Socket)
memset( m_LoadedChunks, 0x00, sizeof(cChunk*)*VIEWDISTANCE*VIEWDISTANCE );
//////////////////////////////////////////////////////////////////////////
m_pState->pReceiveThread = new cThread( ReceiveThread, this );
m_pState->pSendThread = new cThread( SendThread, this );
m_pState->pReceiveThread = new cThread( ReceiveThread, this, "cClientHandle::ReceiveThread" );
m_pState->pSendThread = new cThread( SendThread, this, "cClientHandle::SendThread" );
m_pState->pReceiveThread->Start( true );
m_pState->pSendThread->Start( true );
//////////////////////////////////////////////////////////////////////////
@ -433,7 +433,7 @@ void cClientHandle::HandlePacket( cPacket* a_Packet )
}
if( m_pState->pAuthenticateThread ) delete m_pState->pAuthenticateThread;
m_pState->pAuthenticateThread = new cThread( AuthenticateThread, this );
m_pState->pAuthenticateThread = new cThread( AuthenticateThread, this, "cClientHandle::AuthenticateThread" );
m_pState->pAuthenticateThread->Start( true );
}
break;

View File

@ -111,7 +111,7 @@ void cRoot::Start()
m_Server->StartListenThread();
//cHeartBeat* HeartBeat = new cHeartBeat();
m_InputThread = new cThread( InputThread, this );
m_InputThread = new cThread( InputThread, this, "cRoot::InputThread" );
m_InputThread->Start( true );
while( !m_bStop && !m_bRestart ) // These are modified by external threads

View File

@ -340,8 +340,8 @@ void ServerTickThread( void * a_Param )
void cServer::StartListenThread()
{
m_pState->pListenThread = new cThread( ServerListenThread, this );
m_pState->pTickThread = new cThread( ServerTickThread, this );
m_pState->pListenThread = new cThread( ServerListenThread, this, "cServer::ServerListenThread" );
m_pState->pTickThread = new cThread( ServerTickThread, this, "cServer::ServerTickThread" );
m_pState->pListenThread->Start( true );
m_pState->pTickThread->Start( true );
}

View File

@ -11,12 +11,48 @@
#include "cEvent.h"
#include "cMCLogger.h"
cThread::cThread( ThreadFunc a_ThreadFunction, void* a_Param )
#ifdef _WIN32
//
// 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)
{
}
}
#endif
cThread::cThread( ThreadFunc a_ThreadFunction, void* a_Param, const char* a_ThreadName /* = 0 */ )
: m_ThreadFunction( a_ThreadFunction )
, m_Param( a_Param )
, m_Event( new cEvent() )
, m_StopEvent( 0 )
, m_ThreadName( 0 )
{
if( a_ThreadName )
{
m_ThreadName = new char[ strlen(a_ThreadName)+1 ];
strcpy(m_ThreadName, a_ThreadName);
}
}
cThread::~cThread()
@ -28,6 +64,8 @@ cThread::~cThread()
m_StopEvent->Wait();
delete m_StopEvent;
}
delete [] m_ThreadName;
}
void cThread::Start( bool a_bWaitOnDelete /* = true */ )
@ -40,13 +78,19 @@ void cThread::Start( bool a_bWaitOnDelete /* = true */ )
if( pthread_create( &SndThread, NULL, MyThread, this) )
LOGERROR("ERROR: Could not create thread!");
#else
DWORD ThreadID = 0;
HANDLE hThread = CreateThread( 0 // security
,0 // stack size
, (LPTHREAD_START_ROUTINE) MyThread // function name
,this // parameters
,0 // flags
,0 ); // thread id
,&ThreadID ); // thread id
CloseHandle( hThread );
if( m_ThreadName )
{
SetThreadName(ThreadID, m_ThreadName );
}
#endif
// Wait until thread has actually been created

View File

@ -5,7 +5,7 @@ class cThread
{
public:
typedef void (ThreadFunc)(void*);
cThread( ThreadFunc a_ThreadFunction, void* a_Param );
cThread( ThreadFunc a_ThreadFunction, void* a_Param, const char* a_ThreadName = 0 );
~cThread();
void Start( bool a_bWaitOnDelete = true );
@ -22,4 +22,6 @@ private:
void* m_Param;
cEvent* m_Event;
cEvent* m_StopEvent;
char* m_ThreadName;
};