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:
parent
24efa6f864
commit
aa392170a2
@ -159,8 +159,8 @@ cClientHandle::cClientHandle(const cSocket & a_Socket)
|
|||||||
memset( m_LoadedChunks, 0x00, sizeof(cChunk*)*VIEWDISTANCE*VIEWDISTANCE );
|
memset( m_LoadedChunks, 0x00, sizeof(cChunk*)*VIEWDISTANCE*VIEWDISTANCE );
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
m_pState->pReceiveThread = new cThread( ReceiveThread, this );
|
m_pState->pReceiveThread = new cThread( ReceiveThread, this, "cClientHandle::ReceiveThread" );
|
||||||
m_pState->pSendThread = new cThread( SendThread, this );
|
m_pState->pSendThread = new cThread( SendThread, this, "cClientHandle::SendThread" );
|
||||||
m_pState->pReceiveThread->Start( true );
|
m_pState->pReceiveThread->Start( true );
|
||||||
m_pState->pSendThread->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;
|
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 );
|
m_pState->pAuthenticateThread->Start( true );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -111,7 +111,7 @@ void cRoot::Start()
|
|||||||
m_Server->StartListenThread();
|
m_Server->StartListenThread();
|
||||||
//cHeartBeat* HeartBeat = new cHeartBeat();
|
//cHeartBeat* HeartBeat = new cHeartBeat();
|
||||||
|
|
||||||
m_InputThread = new cThread( InputThread, this );
|
m_InputThread = new cThread( InputThread, this, "cRoot::InputThread" );
|
||||||
m_InputThread->Start( true );
|
m_InputThread->Start( true );
|
||||||
|
|
||||||
while( !m_bStop && !m_bRestart ) // These are modified by external threads
|
while( !m_bStop && !m_bRestart ) // These are modified by external threads
|
||||||
|
@ -340,8 +340,8 @@ void ServerTickThread( void * a_Param )
|
|||||||
|
|
||||||
void cServer::StartListenThread()
|
void cServer::StartListenThread()
|
||||||
{
|
{
|
||||||
m_pState->pListenThread = new cThread( ServerListenThread, this );
|
m_pState->pListenThread = new cThread( ServerListenThread, this, "cServer::ServerListenThread" );
|
||||||
m_pState->pTickThread = new cThread( ServerTickThread, this );
|
m_pState->pTickThread = new cThread( ServerTickThread, this, "cServer::ServerTickThread" );
|
||||||
m_pState->pListenThread->Start( true );
|
m_pState->pListenThread->Start( true );
|
||||||
m_pState->pTickThread->Start( true );
|
m_pState->pTickThread->Start( true );
|
||||||
}
|
}
|
||||||
|
@ -11,12 +11,48 @@
|
|||||||
#include "cEvent.h"
|
#include "cEvent.h"
|
||||||
#include "cMCLogger.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_ThreadFunction( a_ThreadFunction )
|
||||||
, m_Param( a_Param )
|
, m_Param( a_Param )
|
||||||
, m_Event( new cEvent() )
|
, m_Event( new cEvent() )
|
||||||
, m_StopEvent( 0 )
|
, m_StopEvent( 0 )
|
||||||
|
, m_ThreadName( 0 )
|
||||||
{
|
{
|
||||||
|
if( a_ThreadName )
|
||||||
|
{
|
||||||
|
m_ThreadName = new char[ strlen(a_ThreadName)+1 ];
|
||||||
|
strcpy(m_ThreadName, a_ThreadName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cThread::~cThread()
|
cThread::~cThread()
|
||||||
@ -28,6 +64,8 @@ cThread::~cThread()
|
|||||||
m_StopEvent->Wait();
|
m_StopEvent->Wait();
|
||||||
delete m_StopEvent;
|
delete m_StopEvent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete [] m_ThreadName;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cThread::Start( bool a_bWaitOnDelete /* = true */ )
|
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) )
|
if( pthread_create( &SndThread, NULL, MyThread, this) )
|
||||||
LOGERROR("ERROR: Could not create thread!");
|
LOGERROR("ERROR: Could not create thread!");
|
||||||
#else
|
#else
|
||||||
|
DWORD ThreadID = 0;
|
||||||
HANDLE hThread = CreateThread( 0 // security
|
HANDLE hThread = CreateThread( 0 // security
|
||||||
,0 // stack size
|
,0 // stack size
|
||||||
, (LPTHREAD_START_ROUTINE) MyThread // function name
|
, (LPTHREAD_START_ROUTINE) MyThread // function name
|
||||||
,this // parameters
|
,this // parameters
|
||||||
,0 // flags
|
,0 // flags
|
||||||
,0 ); // thread id
|
,&ThreadID ); // thread id
|
||||||
CloseHandle( hThread );
|
CloseHandle( hThread );
|
||||||
|
|
||||||
|
if( m_ThreadName )
|
||||||
|
{
|
||||||
|
SetThreadName(ThreadID, m_ThreadName );
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Wait until thread has actually been created
|
// Wait until thread has actually been created
|
||||||
|
@ -5,7 +5,7 @@ class cThread
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef void (ThreadFunc)(void*);
|
typedef void (ThreadFunc)(void*);
|
||||||
cThread( ThreadFunc a_ThreadFunction, void* a_Param );
|
cThread( ThreadFunc a_ThreadFunction, void* a_Param, const char* a_ThreadName = 0 );
|
||||||
~cThread();
|
~cThread();
|
||||||
|
|
||||||
void Start( bool a_bWaitOnDelete = true );
|
void Start( bool a_bWaitOnDelete = true );
|
||||||
@ -22,4 +22,6 @@ private:
|
|||||||
void* m_Param;
|
void* m_Param;
|
||||||
cEvent* m_Event;
|
cEvent* m_Event;
|
||||||
cEvent* m_StopEvent;
|
cEvent* m_StopEvent;
|
||||||
|
|
||||||
|
char* m_ThreadName;
|
||||||
};
|
};
|
Loading…
Reference in New Issue
Block a user