📄 arwinthread_t.cpp
字号:
//---------------------------------------------------------------------------
#include "ArWinThread_T.h"
#include <process.h>
//---------------------------------------------------------------------------
HANDLE ArWinThread_T::m_hHeap = NULL;
ArWinThreadPool_T* ArWinThread_T::m_ThreadPool = NULL;
//---------------------------------------------------------------------------
ArWinThread_T::ArWinThread_T(ArWinThreadPool_T* pThreadPool)
{
m_ulThread = _beginthreadex(NULL, 0, ThreadProc,(void*) this, CREATE_SUSPENDED, &m_uiThreadID);
m_ThreadPool = pThreadPool;
m_bThreadRun = false;
m_bProcessed = true;
m_pThreadFunc = NULL;
m_bFuncIsCycle = false;
m_bExitThread = false;
};
//---------------------------------------------------------------------------
ArWinThread_T::~ArWinThread_T()
{
if(false == m_bProcessed)
{
::TerminateThread((void*)m_ulThread, 0);
}
};
//---------------------------------------------------------------------------
unsigned int __stdcall ArWinThread_T::ThreadProc(void* pPara)
{
ArWinThread_T* pParent = (ArWinThread_T*)pPara;
while(true)
{
if(pParent->m_bExitThread)
{
break;
}
pParent->m_bProcessed = false;
if(pParent->m_pThreadFunc)
{
pParent->m_pThreadFunc(pParent->m_pThreadPara);
}
pParent->m_bProcessed = true;
if(m_ThreadPool)
{
m_ThreadPool->Free(pParent);
}
::SuspendThread((void*)pParent->m_ulThread);
}
return 0;
}
//---------------------------------------------------------------------------
bool __stdcall ArWinThread_T::SetFunc(PFunc Func)
{
if(m_bProcessed)
{
m_pThreadFunc = Func;
return true;
}
return false;
}
//---------------------------------------------------------------------------
unsigned long __stdcall ArWinThread_T::Resume(void* pPara)
{
m_bThreadRun = true;
if(false == m_bProcessed)
{
return 0;
}
m_pThreadPara = pPara;
m_dwStartTime = ::GetTickCount();
::ResumeThread((void*)m_ulThread);
return m_ulThread;
};
//---------------------------------------------------------------------------
unsigned long __stdcall ArWinThread_T::Suspend(void)
{
if(m_bThreadRun)
{
::SuspendThread((void*)m_ulThread);
return m_ulThread;
}
return 0;
}
//---------------------------------------------------------------------------
int __stdcall ArWinThread_T::SetPriority(ArThrdLv lv)
{
return 0;
};
//---------------------------------------------------------------------------
bool __stdcall ArWinThread_T::Initial(void)
{
return false;
}
//---------------------------------------------------------------------------
void __stdcall ArWinThread_T::Destory(void)
{
delete this;
}
//---------------------------------------------------------------------------
void* ArWinThread_T::operator new (size_t size)
{
void* pData = ::HeapAlloc(m_hHeap, 0,size);
return(pData);
}
//---------------------------------------------------------------------------
void ArWinThread_T::operator delete( void* pData, size_t size )
{
::HeapFree(m_hHeap, 0, pData);
}
//---------------------------------------------------------------------------
bool ArWinThread_T::DestroyHeap(void)
{
if(::HeapDestroy(m_hHeap))
{
return true;
}
else
{
return false;
}
}
//---------------------------------------------------------------------------
bool ArWinThread_T::AllocateHeap(void)
{
m_hHeap = ::HeapCreate(0, 1024, 0);
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -