#ifndef _THREADPOOL_H_ #define _THREADPOOL_H_ #include #include #include #include #include #include #include class threadpool { private: std::size_t _concurrency; std::queue> _queue; std::mutex _mutex; std::condition_variable _cv; std::vector _workers; bool _enabled; public: threadpool(); threadpool(std::size_t concurrency); ~threadpool(); template std::future add_task(std::function func) { std::lock_guard lock(_mutex); std::shared_ptr> pt_ptr = std::make_shared>(func); std::future fut = pt_ptr->get_future(); _queue.push([pt_ptr] { (*pt_ptr)(); }); _cv.notify_one(); return fut; } template std::future add_task(R(*pfn)(Args...), Args... args) { return add_task(std::bind(pfn, args...)); } template std::future add_task(R(C::*pfn)(Args...), C* cPtr, Args... args) { return add_task(std::bind(pfn, cPtr, args...)); } private: void worker_func(); }; #endif // _THREADPOOL_H_