⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 workerthread.cpp

📁 Linux 下的线程池的源代码。很好用!
💻 CPP
字号:
#include "WorkerThread.h"CWorkerThread::CWorkerThread(){    m_Job = NULL;    m_JobData = NULL;    m_ThreadPool = NULL;    m_IsEnd = false;}CWorkerThread::~CWorkerThread(){    if(NULL != m_Job)	delete m_Job;    if(m_ThreadPool != NULL)	delete m_ThreadPool;}void CWorkerThread::Run(){    SetThreadState(THREAD_RUNNING);    //problem occurs here    for(;;)    {	//no job in job list,so we wait.^_^	while(m_Job == NULL)	{	    printf("Job is null,thread %d will wait!\n",GetThreadID());	    m_JobCond.Wait(); 	}	m_ThreadPool->MoveToBusyList(this);		printf("Idle thread %d has get a job and will execute!\n",GetThreadId());	m_Job->Run(m_JobData);	m_Job->SetWorkThread(NULL);	m_Job = NULL;	m_WorkMutex.Unlock();	printf("Append the thread %d to idle list again\n",GetThreadID());	m_ThreadPool->MoveToIdleList(this);    }}void CWorkerThread::Wakeup(CJob* job,void* jobdata){    m_WorkMutex.Lock();    SetJob(job,jobdata);    job->SetWorkThread(this);    m_WorkMutex.Unlock();        m_JobCond.Signal();}void CWorkerThread::SetJob(CJob* job,void* jobdata){    m_VarMutex.Lock();    m_Job = job;    m_JobData = jobdata;    m_VarMutex.Unlock();    m_JobCond.Signal();}void CWorkerThread::SetThreadPool(CThreadPool* thrpool){    m_VarMutex.Lock();    m_ThreadPool = thrpool;    m_VarMutex.Unlock();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -