#pragma once #include #include #include #include #include #include namespace usenetsearch { class ThreadPool { typedef std::unordered_map ThreadStates; typedef std::vector> Threads; size_t m_maxThreads{2}; std::atomic m_stopping{false}; Threads m_threads; std::mutex m_threadsMutex; std::shared_ptr m_threadStates; std::mutex m_threadStatesMutex; public: ThreadPool(); ThreadPool(const ThreadPool&) = delete; ~ThreadPool(); void JoinThreads(); void MaxThreads(std::uint16_t max); void Queue(std::function fn); }; } // namespace usenetsearch