linux下封装的线程池类 和 任务基类
根据具体业务继承任务基类
线程池内使用条件变量来调度任务
下载地址: http://download.csdn.net/detail/mtour/8021853
#ifndef THREADPOOL_H
#define THREADPOOL_H
#include <pthread.h>
#include <time.h>
#include <unistd.h>
#include <stdio.h>
#include <list>
using namespace std;
#define DEFAULT_THREAD_COUNT 5
class CThreadPool;
// base task
class CTask
{
public:
CTask();
virtual ~CTask();
virtual int Do()=0; // the subclass must refined this function
public:
time_t GetCreateTime(){return m_nCreateTime;};
protected:
time_t m_nCreateTime; // when create the task
int m_nDoFlag;
};
class CThreadItem
{
public:
CThreadItem(int nID,CThreadPool* pThreadPool);
~CThreadItem();
void SetQuit(){m_nThreadFlag=0;};
protected:
CThreadItem(){};
void OnTreatTaskThread();
static void *TreatTaskThread(void* pUser) // 接收视频流线程
{
CThreadItem* pThis = (CThreadItem*)pUser;
if (pThis)
{
pThis->OnTreatTaskThread();
}
return 0;
}
private:
int m_nID;
pthread_t m_hThreadHandle;
int m_nThreadFlag;
CThreadPool* m_pThreadPool;
};
class CThreadPool
{
public:
CThreadPool(int nThreadCount);
~CThreadPool();
int Init();
void Fini();
void AddThread(int nCount);
void AddTask(CTask* pTask);
public:
pthread_cond_t m_taskCond;
pthread_mutex_t m_taskMutex;
public:
list<CThreadItem*> m_threadList;
pthread_mutex_t m_threadListMutex;
list<CTask*> m_taskList;
pthread_mutex_t m_taskListMutex;
int m_nThreadCount;
protected:
CThreadPool(){};
};
#endif