線程池的原理大家都知道,直接上代碼了^_^
Thread.h
[cpp] view plain copy #ifndef __THREAD_H #define __THREAD_H #include <vector> #include <string> #include <pthread.h> using namespace std; /** * 執行任務的類,設定任務資料並執行 */ class CTask { protected: string m_strTaskName; /** 任務的名稱 */ void* m_ptrData; /** 要執行的任務的具體資料 */ public: CTask(){} CTask(string taskName) { m_strTaskName = taskName; m_ptrData = NULL; } virtual int Run()= 0; void SetData(void* data); /** 設定任務資料 */ public: virtual ~CTask(){} }; /** * 線程池管理類的實現 */ class CThreadPool { private: static vector<CTask*> m_vecTaskList; /** 工作清單 */ static bool shutdown; /** 線程退出標誌 */ int m_iThreadNum; /** 線程池中啟動的線程數 */ pthread_t *pthread_id; static pthread_mutex_t m_pthreadMutex; /** 線程同步鎖 */ static pthread_cond_t m_pthreadCond; /** 線程同步的條件變數 */ protected: static void* ThreadFunc(void * threadData); /** 新線程的線程回呼函數 */ static int MoveToIdle(pthread_t tid); /** 線程執行結束後,把自己放入到空閑線程中 */ static int MoveToBusy(pthread_t tid); /** 移入到忙碌線程中去 */ int Create(); /** 建立線程池中的線程 */