深入解析C++编程中线程池的使用

2020-01-06 14:01:59于海丽
  •   CThreadPool(); 
  • CThreadPool(int initnum);  virtual ~CThreadPool();  
  •   void SetMaxNum(int maxnum){m_MaxNum = maxnum;} 
  • int GetMaxNum(void){return m_MaxNum;}  void SetAvailLowNum(int minnum){m_AvailLow = minnum;} 
  • int GetAvailLowNum(void){return m_AvailLow;}  void SetAvailHighNum(int highnum){m_AvailHigh = highnum;} 
  • int GetAvailHighNum(void){return m_AvailHigh;}  int GetActualAvailNum(void){return m_AvailNum;} 
  • int GetAllNum(void){return m_ThreadList.size();}  int GetBusyNum(void){return m_BusyList.size();} 
  • void SetInitNum(int initnum){m_InitNum = initnum;}  int GetInitNum(void){return m_InitNum;} 
  • void TerminateAll(void);  void Run(CJob* job,void* jobdata); 
  • };   
  •    
  • CWorkerThread* CThreadPool::GetIdleThread(void)   
  • {   
  • while(m_IdleList.size() ==0 )   
  • m_IdleCond.Wait();   
  •    
  • m_IdleMutex.Lock();   
  • if(m_IdleList.size() > 0 )   
  • {   
  • CWorkerThread* thr = (CWorkerThread*)m_IdleList.front();   
  • printf("Get Idle thread %dn",thr->GetThreadID());   
  • m_IdleMutex.Unlock();   
  • return thr;   
  • }   
  • m_IdleMutex.Unlock();   
  • return NULL;   } 
  •    
  • //create num idle thread and put them to idlelist   
  • void CThreadPool::CreateIdleThread(int num)   
  • {   
  • for(int i=0;i<num;i++){   
  • CWorkerThread* thr = new CWorkerThread();   
  • thr->SetThreadPool(this);   
  • AppendToIdleList(thr);   
  • m_VarMutex.Lock();   
  • m_AvailNum++;   
  • m_VarMutex.Unlock();