#ifndef EXECUTIONMANAGER_H #define EXECUTIONMANAGER_H #include #include #include #include #include "appinfo.h" #include "log.h" class ExecutionManager { struct WorkerThread { std::thread thread; std::atomic done{false}; }; bool finished = false; int threads; int index_count = 0; long long int log_file_max_size = 0; std::string log_dir; std::mutex job_list_mutex; std::atomic state_change = 0; std::atomic active_thread_count = 0; std::vector> thread_list; std::vector> job_list; std::vector> scheduled_list; std::chrono::system_clock::time_point last_poll_time; int polling_interval = 1; Log log_file; public: ExecutionManager(int threads=16); void setLogFile(const Log &other); void setLogFileMaxSize(long long int size); void setLogDirectoy(std::string log_dir); void setJobs(std::vector>& job_list); void printActiveJobs(); void run(); private: bool checkScheduledTaskIsReady(std::chrono::system_clock::time_point next_time); void seperateScheduledTasks(); void pollScheduledTasks(); }; #endif // EXECUTIONMANAGER_H