Files
Sun1602/Utility/IThreadInterface.cpp
2022-10-26 12:25:11 +08:00

58 lines
1003 B
C++

#include "UtilityCommon.h"
#include <windows.h>
#include ".\ithreadinterface.h"
#include <process.h>
#include <assert.h>
namespace util
{
unsigned int __stdcall IThreadInterface::m_fnThread( void * pt )
{
IThreadInterface * pthis = (IThreadInterface *)pt;
DWORD rt = pthis->run();
_endthread();
return rt;
}
IThreadInterface::IThreadInterface()
: m_hThread ( INVALID_HANDLE_VALUE )
{
}
IThreadInterface::~IThreadInterface()
{
if( INVALID_HANDLE_VALUE != m_hThread )
{
CloseHandle( m_hThread );
m_hThread = INVALID_HANDLE_VALUE;
}
}
VOID IThreadInterface::StartThread( BOOL bSuspend )
{
assert( INVALID_HANDLE_VALUE == m_hThread );
if( INVALID_HANDLE_VALUE == m_hThread )
{
unsigned threadId = 0;
m_hThread = (HANDLE)_beginthreadex( NULL, 0, m_fnThread, (void *)this, ( bSuspend ? CREATE_SUSPENDED : 0 ), &threadId );
}
}
VOID IThreadInterface::SuspendThread()
{
::SuspendThread( m_hThread );
}
VOID IThreadInterface::ResumeThread()
{
::ResumeThread( m_hThread );
}
}