CustomStartupRunner/executionmanager.h

42 lines
1.2 KiB
C++

#ifndef EXECUTIONMANAGER_H
#define EXECUTIONMANAGER_H
#include <mutex>
#include <memory>
#include <atomic>
#include <thread>
#include "appinfo.h"
#include "log.h"
class ExecutionManager
{
bool finished = false;
int threads;
int index_count = 0;
int initial_list_size = 0;
long long int log_file_max_size = 0;
std::string log_dir;
std::mutex job_list_mutex;
std::atomic<int> state_change = 0;
std::atomic<int> active_thread_count = 0;
std::vector<std::shared_ptr<std::thread>> thread_list;
std::vector<std::shared_ptr<AppInfo>> job_list;
std::vector<std::shared_ptr<AppInfo>> 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<std::shared_ptr<AppInfo>>& job_list);
void printActiveJobs();
void run();
private:
bool checkScheduledTaskIsReady(std::chrono::system_clock::time_point next_time);
void seperateScheduledTasks();
void pollScheduledTasks();
};
#endif // EXECUTIONMANAGER_H