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 );
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
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;
|
||||
|
@ -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
|
||||
|
@ -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 );
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
};
|
Loading…
Reference in New Issue
Block a user