线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。
原理:
线程池是预先创建线程的一种技术。线程池在还没有任务到来之前,创建一定数量的线程,放入空闲队列中。这些线程都是处于睡眠状态,即均为启动,不消耗CPU,而只是占用较小的内存空间。当请求到来之后,缓冲池给这次请求分配一个空闲线程,把请求传入此线程中运行,进行处理。当预先创建的线程都处于运行状态,即预制线程不够,线程池可以自由创建一定数量的新线程,用于处理更多的请求。当系统比较闲的时候,也可以通过移除一部分一直处于停用状态的线程。
#pragma once #include <list> #include <queue> #include <Windows.h> using namespace std; class CItask { public: CItask(){} virtual ~CItask(){} virtual void Run() = 0; }; class CMyThreadPool { public: CMyThreadPool(void); ~CMyThreadPool(void); public: //1.创建一些线程 bool CreateThreadPool(int min ,int max); //2.销毁线程池 void Destroy(); //3.线程执行函数 static unsigned _stdcall ThreadProc(void*); //4.投递函数 bool PostItask(CItask * Itask); private: list<HANDLE> m_Handle;//装线程 queue<CItask*> m_Itask;//装任务 HANDLE m_semaphore; bool m_bflag; long m_MaxThread;//最大线程数,一般为CPU的2倍 long m_RunThread;//处于执行状态的线程 long m_CreateThread;//所有创建的线程,包括执行状态和睡眠状态 };