#ifndef TASK_SCHEDULER_H #define TASK_SCHEDULER_H #include #include #include #include "utility/messaging/MessageListener.h" #include "utility/messaging/type/MessageInterruptTasks.h" #include "utility/scheduling/Task.h" #include "utility/scheduling/TaskRunner.h" class TaskScheduler { public: static std::shared_ptr getInstance(); void pushTask(std::shared_ptr task); void pushNextTask(std::shared_ptr task); void startSchedulerLoopThreaded(); void startSchedulerLoop(); void stopSchedulerLoop(); bool loopIsRunning() const; bool hasTasksQueued() const; void terminateRunningTasks(); private: static std::shared_ptr s_instance; TaskScheduler(); TaskScheduler(const TaskScheduler&); void operator=(const TaskScheduler&); void processTasks(); bool m_loopIsRunning; bool m_threadIsRunning; bool m_terminateRunningTasks; std::deque> m_taskRunners; mutable std::mutex m_tasksMutex; mutable std::mutex m_loopMutex; mutable std::mutex m_threadMutex; }; #endif // TASK_SCHEDULER_H