线程池

线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。 

原理:
线程池是预先创建线程的一种技术。线程池在还没有任务到来之前,创建一定数量的线程,放入空闲队列中。这些线程都是处于睡眠状态,即均为启动,不消耗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;//所有创建的线程,包括执行状态和睡眠状态
};

 

转载于:https://www.cnblogs.com/Lune-Qiu/p/8424388.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值