29 Task(std::chrono::steady_clock::time_point time, std::function<
void()> func)
30 : time(time), func(std::move(func)), period(std::chrono::seconds(0))
39 Task(std::chrono::steady_clock::time_point time,
40 std::function<
void()> func,
41 std::chrono::steady_clock::duration period)
42 : time(time), func(std::move(func)), period(period)
45 std::chrono::steady_clock::time_point time;
46 std::function<
void()> func;
47 std::chrono::steady_clock::duration period;
52 bool operator()(
const Task &
left,
const Task &
right)
const {
return right.time <
left.time; }
55 std::vector<Task> m_tasks;
57 std::condition_variable m_conditionVariable;
58 std::atomic<bool> m_exit{
false };
59 std::vector<std::thread> m_threads;
63 std::shared_ptr<Property<int>> numberOfThreads;
74 template<
class F,
class...
Args>
75 auto schedule(
F &&
f,
Args &&...
args) -> std::future<std::invoke_result_t<std::decay_t<F>, std::decay_t<Args>...>>;
86 template<
class F,
class...
Args>
88 -> std::future<std::invoke_result_t<std::decay_t<F>, std::decay_t<Args>...>>;
99 template<
class F,
class...
Args>
101 -> std::future<std::invoke_result_t<std::decay_t<F>, std::decay_t<Args>...>>;
112 template<
class F,
class...
Args>
114 const std::chrono::steady_clock::duration &period,
149 -> std::future<std::invoke_result_t<std::decay_t<F>, std::decay_t<Args>...>>
151 using ReturnType = std::invoke_result_t<std::decay_t<F>, std::decay_t<Args>...>;
154 std::make_shared<std::packaged_task<
ReturnType()>>(std::bind(std::forward<F>(
f), std::forward<Args>(
args)...));
159 std::unique_lock<std::mutex>
lock(m_mutex);
160 m_tasks.emplace_back(Task(
t, [
task = std::move(
task)]() { (*task)(); }));
161 std::push_heap(m_tasks.begin(), m_tasks.end(), TaskComperator());
164 m_conditionVariable.notify_one();
170 const std::chrono::steady_clock::duration &period,
174 auto bound_task = std::bind(std::forward<F>(
f), std::forward<Args>(
args)...);
177 std::unique_lock<std::mutex>
lock(m_mutex);
178 m_tasks.emplace_back(Task(std::chrono::steady_clock::now() +
d, std::move(
bound_task), period));
179 std::push_heap(m_tasks.begin(), m_tasks.end(), TaskComperator());
182 m_conditionVariable.notify_one();
auto schedule_after(const std::chrono::steady_clock::duration &d, F &&f, Args &&...args) -> std::future< std::invoke_result_t< std::decay_t< F >, std::decay_t< Args >... > >
Definition SchedulerService.h:141
auto schedule_at(const std::chrono::steady_clock::time_point &t, F &&f, Args &&...args) -> std::future< std::invoke_result_t< std::decay_t< F >, std::decay_t< Args >... > >
Definition SchedulerService.h:148
void schedule_at_fixed_rate(const std::chrono::steady_clock::duration &d, const std::chrono::steady_clock::duration &period, F &&f, Args &&...args)
Definition SchedulerService.h:169
auto schedule(F &&f, Args &&...args) -> std::future< std::invoke_result_t< std::decay_t< F >, std::decay_t< Args >... > >
Definition SchedulerService.h:134