40#include <condition_variable>
79class Job :
public std::enable_shared_from_this<Job> {
83 template <
typename Func,
typename... Args>
84 Job(
const std::string& name,
const size_t&
priority, Func&& func, Args&&... args)
86 func_(std::bind(std::forward<Func>(func), std::forward<Args>(args)...)),
114 std::condition_variable cv_;
115 std::atomic<bool> completed_;
116 static void (
Job::*executePtr)() const;
124 void submitJob(
const std::shared_ptr<Job>& job);
125 void pushJob(
const std::shared_ptr<Job>& job);
127 static void waitForJob(
const std::shared_ptr<Job>& job);
132 std::condition_variable jobAvailable_;
133 std::condition_variable jobDone_;
134 std::vector<std::thread> threads_;
135 std::array<std::deque<std::shared_ptr<Job>>, 6> jobs_;
136 std::atomic<bool> stop_;
Definition threadqueue.hpp:79
void executeNoTimer() const
Definition threadqueue.cpp:84
void executeTimer() const
Definition threadqueue.cpp:88
std::string name_
Definition threadqueue.hpp:107
std::atomic< size_t > priority
Definition threadqueue.hpp:111
std::function< void()> JobFunction
Definition threadqueue.hpp:81
std::string getName() const
Definition threadqueue.hpp:101
static void setExecutionMethod(bool useTimer)
Definition threadqueue.hpp:91
void complete()
Definition threadqueue.cpp:103
threadqueue_job_state getState() const
Definition threadqueue.hpp:102
std::mutex mtx_
Definition threadqueue.hpp:105
std::vector< std::shared_ptr< Job > > reverseDependencies_
Definition threadqueue.hpp:106
void setState(const threadqueue_job_state &state)
Definition threadqueue.hpp:103
void execute()
Definition threadqueue.hpp:96
Job(const std::string &name, const size_t &priority, Func &&func, Args &&... args)
Definition threadqueue.hpp:84
void wait()
Definition threadqueue.cpp:95
bool isReady() const
Definition threadqueue.cpp:82
JobFunction func_
Definition threadqueue.hpp:108
threadqueue_job_state state_
Definition threadqueue.hpp:109
void addDependency(const std::shared_ptr< Job > &dependency)
Definition threadqueue.cpp:63
std::atomic< int > dependencies_
Definition threadqueue.hpp:110
Definition threadqueue.hpp:119
void stop()
Definition threadqueue.cpp:141
static void waitForJob(const std::shared_ptr< Job > &job)
Definition threadqueue.cpp:154
void submitJob(const std::shared_ptr< Job > &job)
Definition threadqueue.cpp:126
void pushJob(const std::shared_ptr< Job > &job)
Definition threadqueue.cpp:118
~ThreadQueue()
Definition threadqueue.cpp:116
std::string jobStateToStr(threadqueue_job_state s)
Definition threadqueue.cpp:51
threadqueue_job_state
Definition threadqueue.hpp:50
@ THREADQUEUE_JOB_STATE_READY
Job is ready to run.
Definition threadqueue.hpp:64
@ THREADQUEUE_JOB_STATE_RUNNING
Job is running.
Definition threadqueue.hpp:69
@ THREADQUEUE_JOB_STATE_PAUSED
Job has been submitted, but is not allowed to run yet.
Definition threadqueue.hpp:54
@ THREADQUEUE_JOB_STATE_WAITING
Job is waiting for dependencies.
Definition threadqueue.hpp:59
@ THREADQUEUE_JOB_STATE_DONE
Job is completed.
Definition threadqueue.hpp:74