科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Linux下通用线程池的创建与使用(上) (2)

Linux下通用线程池的创建与使用(上) (2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

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

作者:赛迪网技术社区 来源:赛迪网技术社区 2007年10月22日

关键字: 使用 创建 线程池 Linux

  • 评论
  • 分享微博
  • 分享邮件

理解系统组件

下面我们分开来了解系统中的各个组件。

CThreadManage

CThreadManage的功能非常简单,其提供最简单的方法,其类定义如下:

class CThreadManage 

{ 

private: 

CThreadPool* m_Pool; 

int m_NumOfThread; 

protected: 

public: 

void SetParallelNum(int num); 

CThreadManage(); 

CThreadManage(int num); 

virtual ~CThreadManage(); 

void Run(CJob* job,void* jobdata); 

void TerminateAll(void); 

};

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

CThreadManage::CThreadManage(){ 

m_NumOfThread = 10; 

m_Pool = new CThreadPool(m_NumOfThread); 

} 

CThreadManage::CThreadManage(int num){ 

m_NumOfThread = num; 

m_Pool = new CThreadPool(m_NumOfThread); 

} 

CThreadManage::~CThreadManage(){ 

if(NULL != m_Pool) 

delete m_Pool; 

} 

void CThreadManage::SetParallelNum(int num){ 

m_NumOfThread = num; 

} 

void CThreadManage::Run(CJob* job,void* jobdata){ 

m_Pool->Run(job,jobdata); 

} 

void CThreadManage::TerminateAll(void){ 

m_Pool->TerminateAll(); 

}

CThread

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

class CThread 

{ 

private: 

int m_ErrCode; 

Semaphore m_ThreadSemaphore; //the inner semaphore, which is used to realize 

unsigned long m_ThreadID; 

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); 

};
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章