#include"CThread.h"
CThread::CThread(void) :m_pCTask(NULL), m_bRun(false),m_nThreadId(0),m_handle(nullptr)
{
}
CThread::CThread(CTask* pCTask) :m_strThreadName(""), m_pCTask(pCTask), m_bRun(false),m_nThreadId(0),m_handle(nullptr)
{
}
CThread::CThread(const char* pThreadName, CTask* pCTask):m_strThreadName(pThreadName),
m_pCTask(pCTask), m_bRun(false), m_nThreadId(0), m_handle(nullptr)
{
}
CThread::CThread(std::string strThreadName, CTask* pCTask) : m_strThreadName(strThreadName),
m_pCTask(pCTask), m_bRun(false), m_nThreadId(0), m_handle(nullptr)
{
}
CThread::~CThread(void)
{
m_bRun = false;
Terminate();//线程关闭
}
bool CThread::Start(bool bSuspend)
{
if (m_bRun)//判断程序是否已经正常运行
{
return true;
}
if (bSuspend)//是否需要延迟启动
{
m_handle = (HANDLE)_beginthreadex(NULL, 0, StaticThreadFunc, this, CREATE_SUSPENDED, &m_nThreadId);
}
else
{
m_handle = (HANDLE)_beginthreadex(NULL, 0, StaticThreadFunc, this, 0, &m_nThreadId);
}
m_bRun = (NULL != m_handle);
return m_bRun;
}
void CThread::Join(int nTimeout)
{
if (NULL == m_handle || !m_bRun)
{
return;
}
if (nTimeout <= 0)
{
nTimeout = INFINITE;
}
::WaitForSingleObject(m_handle, nTimeout);
}
void CThread::Resume()
{
if (NULL == m_handle || !m_bRun)
{
return;
}
::SuspendThread(m_handle);
}
bool CThread::Terminate(unsigned long ulExitCode)
{
if (NULL == m_handle || !m_bRun)
{
return true;
}
if (::TerminateThread(m_handle, ulExitCode))
{
::CloseHandle(m_handle);
return true;
}
return false;
}
unsigned int CThread::GetThreadId()
{
return m_nThreadId;
}
std::string CThread::GetThreadName()
{
return m_strThreadName;
}
void CThread::SetThreadName(std::string strThreadName)
{
m_strThreadName = strThreadName;
}
void CThread::SetThreadName(const char* pThreadName)
{
if (NULL == pThreadName)
{
m_strThreadName = "";
}
else
{
m_strThreadName = pThreadName;
}
}
unsigned int CThread::StaticThreadFunc(void* pArg)
{
CThread* pThread = (CThread*)pArg;
pThread->Run();
return 0;
}
线程池4-thread.cpp
最新推荐文章于 2023-03-07 20:52:46 发布