Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // https://github.com/progschj/ThreadPool/blob/master/ThreadPool.h
- #include <iostream>
- #include <thread>
- #include <vector>
- #include <functional>
- #include <condition_variable>
- #include <chrono>
- #include <mutex>
- #include <queue>
- 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<void()> & function) {
- if (status_ != ExecutorStatus::Work) {
- return;
- }
- }
- private:
- ExecutorStatus status_;
- std::mutex mutex_;
- std::condition_variable condition_;
- std::queue< std::function<void()> > tasks;
- size_t thread_count_;
- std::vector<std::thread> 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;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement