C++ | 简单的使用 bind + function 实现一个简单的线程池(简单逻辑)

#include 
using namespace placeholders;
//线程类
class Thread{
public:
    Thread(function<void(int)> func, int x):_func(func), _x(x){};
    ~Thread(){};
    thread start(){
        thread t(_func, _x);
        return t;
    }

private:
    function<void(int)> _func;
    int _x;

};

class ThreadPool{
public:
    ThreadPool(){};
    ~ThreadPool(){};


    //准备部分包括  将线程要执行的函数进行绑定,然后把线程类的start 封装到容器中  start 执行线程类的function 
    //简单来讲就是把要执行的函数封装到 线程 thread   等待thread执行
    //差点人傻了
    // thread t(func1, 参数...); 然后 t.join();         这就是创建线程 t 然后线程 t执行函数func1
    void parper(int n){
        for(int i = 0; i < n; ++i){
            _pool.push_back(new Thread(bind(&ThreadPool::function, this, _1), i));
        }

        for(int i = 0; i < n; ++i){
            _header.push_back(_pool[i]->start());
        }
    }
    void run(){
        for(thread &x : _header){
            x.join();
        }
    }

private:
    vector<Thread*> _pool;
    vector<thread> _header;

    //线程执行的函数
    void function(int id){
        cout<<"action and the id = "<<id<<endl;
    }

};

int main(){

    ThreadPool test;
    test.parper(10);
    test.run();
    return 0;
}

你可能感兴趣的:(c++,开发语言)