#pragma once #include #include #include #include #include #include #include #include class ThreadPool { public: explicit ThreadPool(std::size_t threadCount); ~ThreadPool(); Q_DISABLE_COPY(ThreadPool) void push(std::function functor); static bool isThreadInterrupted(); private: void worker(std::size_t index); void shutdown(); std::atomic mDone {false} ; static thread_local std::atomic* mLocalToThreadDone; std::vector mThreads; std::queue> mFunctors; std::condition_variable mCv; std::mutex mMutex; };