HCppBox/hcppbox/HCPPThread.cpp

76 lines
1.6 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "HCPPThread.h"
HCPPThread::HCPPThread():HCPPObject(NULL),std::thread(std::bind(&HCPPThread::RunThread,this)),m_idle_sleep_time(std::chrono::milliseconds(1))
{
}
HCPPThread::~HCPPThread()
{
}
void HCPPThread::RunThread()
{
//HCPPOBject先于线程初始化此时可使用HCPPObject的成员。
//等待初始化
while(!HasFlag(HCPPOBJECT_FLAG_RUN_INIT))
{
Run();
if (m_idle_sleep_time != std::chrono::milliseconds(0))
{
std::this_thread::sleep_for(m_idle_sleep_time);
}
else
{
std::this_thread::yield();
}
}
//HCPPThread类初始化完成,可使用类中的成员变量
while(!HasFlag(HCPPOBJECT_FLAG_TO_BE_DELETED))
{
Run();
if (m_idle_sleep_time != std::chrono::milliseconds(0))
{
std::this_thread::sleep_for(m_idle_sleep_time);
}
else
{
std::this_thread::yield();
}
}
//分离线程与对象
detach();
//删除自身
delete this;
}
//创建线程
HCPPThread *HCPPThread::New()
{
HCPPThread *ret=new HCPPThread();
if(ret!=NULL)
{
//设定线程信息为新创建的线程,表示线程对象的所有权归属新创建的线程
ret->SetThreadId(ret->get_id(),true);
//设定为可执行对象此时Run函数开始生效
ret->SetRunable();
}
return ret;
}
//删除线程
void HCPPThread::DeleteThread()
{
//设置删除标志
DeleteLatter();
}
void HCPPThread::SetChildDelete(bool childdelete)
{
HCPPObject::SetChildDelete(childdelete);
}