45 lines
1.3 KiB
C++
45 lines
1.3 KiB
C++
#ifndef EXECUTIONMANAGER_H
|
|
#define EXECUTIONMANAGER_H
|
|
|
|
#include <mutex>
|
|
#include <memory>
|
|
#include <atomic>
|
|
#include <thread>
|
|
#include "appinfo.h"
|
|
#include "log.h"
|
|
|
|
class ExecutionManager
|
|
{
|
|
struct WorkerThread {
|
|
std::thread thread;
|
|
std::atomic<bool> 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<int> state_change = 0;
|
|
std::atomic<int> active_thread_count = 0;
|
|
std::vector<std::shared_ptr<WorkerThread>> 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
|