diff options
author | faketruth <faketruth@0a769ca7-a7f5-676a-18bf-c427514a06d6> | 2011-12-23 15:26:29 +0100 |
---|---|---|
committer | faketruth <faketruth@0a769ca7-a7f5-676a-18bf-c427514a06d6> | 2011-12-23 15:26:29 +0100 |
commit | aa392170a2b0fc392c8203a4b31301eb7c94890e (patch) | |
tree | 3ab9ec0b2046dd25f7221dbfad563befdb83469c | |
parent | Digging leaves with shears now drops leaves (diff) | |
download | cuberite-aa392170a2b0fc392c8203a4b31301eb7c94890e.tar cuberite-aa392170a2b0fc392c8203a4b31301eb7c94890e.tar.gz cuberite-aa392170a2b0fc392c8203a4b31301eb7c94890e.tar.bz2 cuberite-aa392170a2b0fc392c8203a4b31301eb7c94890e.tar.lz cuberite-aa392170a2b0fc392c8203a4b31301eb7c94890e.tar.xz cuberite-aa392170a2b0fc392c8203a4b31301eb7c94890e.tar.zst cuberite-aa392170a2b0fc392c8203a4b31301eb7c94890e.zip |
-rw-r--r-- | source/cClientHandle.cpp | 6 | ||||
-rw-r--r-- | source/cRoot.cpp | 2 | ||||
-rw-r--r-- | source/cServer.cpp | 4 | ||||
-rw-r--r-- | source/cThread.cpp | 48 | ||||
-rw-r--r-- | source/cThread.h | 4 |
5 files changed, 55 insertions, 9 deletions
diff --git a/source/cClientHandle.cpp b/source/cClientHandle.cpp index b8de73467..8374a8045 100644 --- a/source/cClientHandle.cpp +++ b/source/cClientHandle.cpp @@ -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;
diff --git a/source/cRoot.cpp b/source/cRoot.cpp index 518275088..928461976 100644 --- a/source/cRoot.cpp +++ b/source/cRoot.cpp @@ -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
diff --git a/source/cServer.cpp b/source/cServer.cpp index e6d475f46..5fbd6d8c7 100644 --- a/source/cServer.cpp +++ b/source/cServer.cpp @@ -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 );
}
diff --git a/source/cThread.cpp b/source/cThread.cpp index d0ada2b4e..4d09907ab 100644 --- a/source/cThread.cpp +++ b/source/cThread.cpp @@ -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
diff --git a/source/cThread.h b/source/cThread.h index 1e9d73c17..f2cd8a75d 100644 --- a/source/cThread.h +++ b/source/cThread.h @@ -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;
};
\ No newline at end of file |