#pragma once #include #include #include "Containers/Array.h" #include "Containers/List.h" namespace Seele { class ThreadPool { public: ThreadPool(uint32 numWorkers = std::thread::hardware_concurrency()); ~ThreadPool(); void runAndWait(List> functions); private: struct Task { uint64 numRemaining = 0; List> functions; }; void work(); Array workers; std::mutex taskLock; std::condition_variable taskCV; std::condition_variable completedCV; Task currentTask; bool running = true; }; }