58 lines
1.0 KiB
C++
58 lines
1.0 KiB
C++
#include "stdafx.h"
|
|
#include <WBANetwork/Common.h>
|
|
#include <WBANetwork/WBANetwork.h>
|
|
#include <WBANetwork/util/Thread.h>
|
|
|
|
using namespace WBANetwork;
|
|
|
|
Thread::Thread()
|
|
: m_threadID( 0 ),
|
|
m_handleThread( INVALID_HANDLE_VALUE )
|
|
{
|
|
}
|
|
|
|
Thread::~Thread()
|
|
{
|
|
if(m_handleThread!=INVALID_HANDLE_VALUE)
|
|
{
|
|
::CloseHandle(m_handleThread);
|
|
}
|
|
}
|
|
|
|
HANDLE Thread::Start()
|
|
{
|
|
m_handleThread = (HANDLE)_beginthreadex(0, 0, Runner, (LPVOID)this, 0, &m_threadID);
|
|
|
|
return m_handleThread;
|
|
}
|
|
|
|
bool Thread::Terminate( DWORD exitCode )
|
|
{
|
|
if( m_handleThread == INVALID_HANDLE_VALUE )
|
|
return true;
|
|
|
|
bool ret = ( ::TerminateThread( m_handleThread, exitCode ) == TRUE );
|
|
m_handleThread = INVALID_HANDLE_VALUE;
|
|
|
|
return ret;
|
|
}
|
|
|
|
bool Thread::WaitForTerminate( DWORD timeout )
|
|
{
|
|
if( m_handleThread == INVALID_HANDLE_VALUE )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return ( ::WaitForSingleObject( m_handleThread, timeout ) == WAIT_OBJECT_0 );
|
|
}
|
|
|
|
unsigned int __stdcall Thread::Runner( LPVOID parameter )
|
|
{
|
|
Thread* instance = ( Thread* )parameter;
|
|
|
|
instance->Run();
|
|
|
|
_endthreadex(0);
|
|
return 0;
|
|
} |