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

2020-01-06 14:01:59于海丽

其中m_Pool指向实际的线程池;m_NumOfThread是初始创建时候允许创建的并发的线程个数。另外Run和TerminateAll方法也非常简单,只是简单的调用CThreadPool的一些相关方法而已。其具体的实现如下:

 

 
  1. CThreadManage::CThreadManage()  { 
  2. m_NumOfThread = 10;  m_Pool = new CThreadPool(m_NumOfThread); 
  3. }   
  4. CThreadManage::CThreadManage(int num)  { 
  5. m_NumOfThread = num;  m_Pool = new CThreadPool(m_NumOfThread); 
  6. }   
  7. CThreadManage::~CThreadManage()  { 
  8. if(NULL != m_Pool)  delete m_Pool; 
  9. }   
  10. void CThreadManage::SetParallelNum(int num)  { 
  11. m_NumOfThread = num;  } 
  12.   void CThreadManage::Run(CJob* job,void* jobdata) 
  13. {  m_Pool->Run(job,jobdata); 
  14. }   
  15. void CThreadManage::TerminateAll(void)  { 
  16. m_Pool->TerminateAll();  } 

CThread

CThread 类实现了对Linux中线程操作的封装,它是所有线程的基类,也是一个抽象类,提供了一个抽象接口Run,所有的CThread都必须实现该Run方法。CThread的定义如下所示:

 

 
  1. class CThread  { 
  2. private:  int m_ErrCode; 
  3. Semaphore m_ThreadSemaphore; //the inner semaphore, which is used to realize  unsigned long m_ThreadID;