39#include <condition_variable> 
   78class Job : 
public std::enable_shared_from_this<Job> {
 
   89    template <
typename Func, 
typename... Args>
 
   90    Job(std::string name, std::size_t 
priority, Func&& func, Args&&... args)
 
   92          func_(
std::bind(
std::forward<Func>(func), 
std::forward<Args>(args)...)),
 
 
  115    std::condition_variable cv_;
 
  116    std::atomic<bool> completed_;
 
 
  125    void submitJob(
const std::shared_ptr<Job>& job);
 
  126    void pushJob(
const std::shared_ptr<Job>& job);
 
  128    static void waitForJob(
const std::shared_ptr<Job>& job);
 
  133    std::condition_variable jobAvailable_;
 
  134    std::condition_variable jobDone_;
 
  135    std::vector<std::thread> threads_;
 
  136    std::array<std::deque<std::shared_ptr<Job>>, 6> jobs_;
 
  137    std::atomic<bool> stop_;
 
 
Definition threadqueue.hpp:78
std::string name_
Definition threadqueue.hpp:108
Job(std::string name, std::size_t priority, Func &&func, Args &&... args)
Definition threadqueue.hpp:90
std::atomic< std::size_t > priority
Definition threadqueue.hpp:112
std::function< void()> JobFunction
Definition threadqueue.hpp:80
std::string getName() const
Definition threadqueue.hpp:102
void complete()
Definition threadqueue.cpp:104
threadqueue_job_state getState() const
Definition threadqueue.hpp:103
void execute() const
Definition threadqueue.cpp:87
void setState(threadqueue_job_state state)
Definition threadqueue.hpp:104
std::mutex mtx_
Definition threadqueue.hpp:106
std::vector< std::shared_ptr< Job > > reverseDependencies_
Definition threadqueue.hpp:107
void wait()
Definition threadqueue.cpp:96
bool isReady() const
Definition threadqueue.cpp:85
JobFunction func_
Definition threadqueue.hpp:109
threadqueue_job_state state_
Definition threadqueue.hpp:110
void addDependency(const std::shared_ptr< Job > &dependency)
Definition threadqueue.cpp:62
Job(std::string name, std::size_t priority, JobFunction func)
Definition threadqueue.hpp:81
std::atomic< int > dependencies_
Definition threadqueue.hpp:111
Definition threadqueue.hpp:119
void stop()
Definition threadqueue.cpp:142
void initThreadQueue(int numThreads)
Definition threadqueue.cpp:111
static void waitForJob(const std::shared_ptr< Job > &job)
Definition threadqueue.cpp:155
void submitJob(const std::shared_ptr< Job > &job)
Definition threadqueue.cpp:127
void pushJob(const std::shared_ptr< Job > &job)
Definition threadqueue.cpp:119
~ThreadQueue()
Definition threadqueue.cpp:117
ThreadQueue()
Definition threadqueue.hpp:121
Definition jobManagement.cpp:168
std::string jobStateToStr(threadqueue_job_state s)
Definition threadqueue.cpp:50
threadqueue_job_state
Definition threadqueue.hpp:49
@ THREADQUEUE_JOB_STATE_READY
Job is ready to run.
Definition threadqueue.hpp:63
@ THREADQUEUE_JOB_STATE_RUNNING
Job is running.
Definition threadqueue.hpp:68
@ THREADQUEUE_JOB_STATE_PAUSED
Job has been submitted, but is not allowed to run yet.
Definition threadqueue.hpp:53
@ THREADQUEUE_JOB_STATE_WAITING
Job is waiting for dependencies.
Definition threadqueue.hpp:58
@ THREADQUEUE_JOB_STATE_DONE
Job is completed.
Definition threadqueue.hpp:73