DragonNest/Client/EtFileSystemTool/Thread.cpp

61 lines
2.1 KiB
C++
Raw Normal View History

2024-12-20 16:56:44 +08:00
<EFBFBD><EFBFBD>#include "stdafx.h"
#include "Thread.h"
Thread::Thread()
: m_nThreadID( 0 ), m_hHandleThread( INVALID_HANDLE_VALUE )
{
}
Thread::~Thread()
{
m_bThreadLoop = false;
}
bool
Thread::Start()
{
if( m_hHandleThread != INVALID_HANDLE_VALUE )
return false;
m_hHandleThread = ::CreateThread( 0, 0, _Runner, ( LPVOID )this, 0, &m_nThreadID );
if( m_hHandleThread == 0 )
return false;
m_bThreadLoop = true;
return true;
}
bool
Thread::Terminate( DWORD nExitCode )
{
bool ret;
if( m_hHandleThread == INVALID_HANDLE_VALUE )
return true;
ret = ( ::TerminateThread( m_hHandleThread, nExitCode ) == TRUE );
m_hHandleThread = INVALID_HANDLE_VALUE;
return ret;
}
bool
Thread::WaitForTerminate( DWORD nTimeout )
{
if( m_hHandleThread == INVALID_HANDLE_VALUE )
return false;
return ( ::WaitForSingleObject( m_hHandleThread, nTimeout ) == WAIT_OBJECT_0 );
}
DWORD WINAPI
Thread::_Runner( LPVOID pParam )
{
Thread* pInstance = static_cast<Thread*>( pParam );
pInstance->Run();
return 0;
}