#pragma once #include #include #include #include #include namespace WillowVox { enum class Priority { High = 0, Medium = 1, Low = 2, Count = 3 }; class ThreadPool { public: ThreadPool(); ~ThreadPool(); void Start(int numThreads); void Enqueue(const std::function& job, Priority priority = Priority::Medium); private: void ThreadLoop(); // Queues for each priority std::array>, static_cast(Priority::Count)> m_queues; // Queue to wake up threads when a job is queued moodycamel::BlockingConcurrentQueue m_signal; std::vector m_threads; std::atomic m_shouldTerminate; }; }