线程池4-thread.cpp

#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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2020年冬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值