Files
2022-10-26 12:25:11 +08:00

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;
}