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

2020-01-06 14:01:59于海丽
  • bool m_Detach; //The thread is detached  bool m_CreateSuspended; //if suspend after creating 
  • char* m_ThreadName;  ThreadState m_ThreadState; //the state of the thread 
  •   protected: 
  • void SetErrcode(int errcode){m_ErrCode = errcode;}  static void* ThreadFunction(void*); 
  •   public: 
  • CThread();  CThread(bool createsuspended,bool detach); 
  • virtual ~CThread();   
  • virtual void Run(void) = 0;  void SetThreadState(ThreadState state){m_ThreadState = state;} 
  • bool Terminate(void); //Terminate the threa  bool Start(void); //Start to execute the thread 
  • void Exit(void);  bool Wakeup(void); 
  • ThreadState GetThreadState(void){return m_ThreadState;}  int GetLastError(void){return m_ErrCode;} 
  • void SetThreadName(char* thrname){strcpy(m_ThreadName,thrname);}  char* GetThreadName(void){return m_ThreadName;} 
  • int GetThreadID(void){return m_ThreadID;}  bool SetPriority(int priority); 
  • int GetPriority(void);  int GetConcurrency(void); 
  • void SetConcurrency(int num);  bool Detach(void); 
  • bool Join(void);  bool Yield(void); 
  • int Self(void);  }; 

    线程的状态可以分为四种,空闲、忙碌、挂起、终止(包括正常退出和非正常退出)。由于目前Linux线程库不支持挂起操作,因此,我们的此处的挂起操作类似于暂停。如果线程创建后不想立即执行任务,那么我们可以将其“暂停”,如果需要运行,则唤醒。有一点必须注意的是,一旦线程开始执行任务,将不能被挂起,其将一直执行任务至完毕。