// https://github.com/progschj/ThreadPool/blob/master/ThreadPool.h #include #include #include #include #include #include #include #include class Executor { private: enum class ExecutorStatus { Work, Shutdown, }; public: explicit Executor(size_t thread_count) : thread_count_(thread_count) { workers_.reserve(thread_count); for (auto i = 0; i < thread_count; ++i) { workers_.emplace_back([this]{ for (;;;) { } }) } } ~Executor() { // TODO: } void add_task(const std::function & function) { if (status_ != ExecutorStatus::Work) { return; } } private: ExecutorStatus status_; std::mutex mutex_; std::condition_variable condition_; std::queue< std::function > tasks; size_t thread_count_; std::vector workers_; }; int main() { Executor executor(5); executor.add_task([]() { std::cout << "Start" << std::endl; std::this_thread::sleep_for(std::chrono::seconds(1)); std::cout << "Finish" << std::endl; }); std::this_thread::sleep_for(std::chrono::seconds(3)); executor.add_task([]() { std::cout << "Start" << std::endl; std::this_thread::sleep_for(std::chrono::seconds(1)); std::cout << "Finish" << std::endl; }); std::this_thread::sleep_for(std::chrono::seconds(10)); std::cout << "Hello, World!" << std::endl; return 0; }