代码拉取完成,页面将自动刷新
同步操作将从 niukey/threadpool 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include "thread_t.h"
thread_t::thread_t( uint32_t tid_, pull_task_fun_t &fun_, exit_fun_t exit_fun_ )
:idle_timeout(UINT32_MAX),
pull_task(fun_),
exit_fun(exit_fun_),
tid(tid_)
{
b_run = false;
}
thread_t::~thread_t(void)
{
}
int thread_t::get_status()
{
return status.load();
}
void thread_t::run( task_ptr_t &task_ )
{
lock_guard_t lock_guard(mutex);
if (status == suspend)
{
task = task_;
wake_up();
}
}
void thread_t::start()
{
b_run = true;
thread = std::make_shared<std::thread>(&thread_t::loop,this);
}
void thread_t::stop()
{
b_run = false;
if (status == suspend){
wake_up ();
}
if(thread->joinable()){
thread->join();
}
}
void thread_t::set_idle_timeout(uint32_t idle_timeout_ )
{
idle_timeout = idle_timeout_;
}
void thread_t::wake_up()
{
status = runing;
cond_var.notify_one();
}
void thread_t::loop()
{
while(b_run)
{
//mutex.lock();
if (task.use_count() == 0)
{
// mutex.unlock();
bool rc = pull_task(task);
if (rc == false)
{
to_sleep();
}
else
{
to_work();
}
}
else
{
// mutex.unlock();
to_work();
}
}
exit_fun(tid);
}
void thread_t::to_sleep()
{
status = suspend;
unique_lock_t unique_lock(cond_var_mutex);
if (cond_var.wait_for(unique_lock, std::chrono::microseconds(idle_timeout))
== std::cv_status::timeout)
{
wait_timeout();
}
}
void thread_t::wait_timeout()
{
b_run = false;
detach();
}
void thread_t::to_work()
{
task->do_work();
task.reset();
}
uint32_t thread_t::get_tid()
{
return tid;
}
void thread_t::detach()
{
thread->detach();
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。