linux 线程池类封装

来源:互联网 发布:英语录音软件 编辑:程序博客网 时间:2024/06/05 20:17

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  5class CThreadPool;// base taskclass CTask{public:CTask();virtual ~CTask();virtual int Do()=0;       // the subclass must refined this functionpublic:time_t GetCreateTime(){return m_nCreateTime;};protected:time_t  m_nCreateTime;  // when create the taskint     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


0 0
原创粉丝点击