#include"CThread.h"
#include<set>
#include<list>
#define TASK_PRIORITY_HIGH 0 //高优先级
#define TASK_PRIORITY_MIDDLE 1 //中优先级
#define TASK_PRIORITY_LOW 2 //低优先级
class CThreadPoolExe
{
public:
CThreadPoolExe(void);
~CThreadPoolExe(void);
bool Init(unsigned int unMinThreads = 5, unsigned int unMaxThreads = 10, unsigned int unMaxPendingTasks = 100);
bool Execute(CTask* pCTask, int nPriority = TASK_PRIORITY_HIGH);
bool InsertTaskQueue(CTask* pCTask, int nPriority = TASK_PRIORITY_HIGH);
void Terminate();
unsigned int GetThreadPoolSize();
int StartConnect();
private:
CTask* GetTask();//获取任务列表中的任务,若任务为空,返回NULL
unsigned int GetTaskSize();//获取队列的加权量
private:
//处理线程类
class CWorker :public CThread
{
public:
CWorker(CThreadPoolExe* pThreadPool, CTask* pFirstTask = NULL);
~CWorker();
void Run();//工作线程处理函数
void Destroy() { delete this; };
private:
CThreadPoolExe* m_pThreadPool;//线程池
CTask* m_pFirstTask; //开始工作的类
volatile bool m_bRun; //是否在运行
};
typedef std::set<CWorker*> ThreadPool; //线程池队列
typedef std::list<CTask*> Tasks; //处理消息数据
typedef Tasks::iterator TasksItr; //处理消息指针
typedef ThreadPool::iterator ThreadPoolItr; //线程指针
ThreadPool m_ThreadPool;//处理线程池
ThreadPool m_TrashThread; //回收线程池
Tasks m_TasksHigh; //优先级为高的队列(暂未实现加权 10)
Tasks m_TaskMiddle; //优先级为中的队列(暂未实现加权 3)
Tasks m_TaskLow; //优先级为低的队列(暂未实现加权 1)
CRITICAL_SECTION m_csTasksLock; //临界区对象处理
CRITICAL_SECTION m_csThreadPoolLock; //临界区线程处理
HANDLE m_pTasksSemaphore;//处理队列的累加信号量
volatile bool m_bEnableInsertTask; //是否可以加入Task信息
volatile unsigned int m_nMinThreads; //最小线程数
volatile unsigned int m_nMaxThreads; //最大线程数
volatile unsigned int m_nMaxPendingTasks; //允许有多少任务等待
public:
volatile bool m_bRun;
std::string strServerIp;
HANDLE m_pThreadConnect;
};
线程池2--CThreadPool
最新推荐文章于 2024-01-01 20:47:03 发布