#ifndef __DARKRL__TASKDISPATCH_HPP__ #define __DARKRL__TASKDISPATCH_HPP__ #include #include #include #include #include #include class TaskDispatch { public: TaskDispatch( size_t workers ); ~TaskDispatch(); static void Queue( const std::function& f ); static void Queue( std::function&& f ); static void Sync(); private: void Worker(); std::vector> m_queue; std::mutex m_queueLock; std::condition_variable m_cvWork, m_cvJobs; std::atomic m_exit; size_t m_jobs; std::vector m_workers; }; #endif