fixed merge

This commit is contained in:
2023-12-03 18:02:15 +03:00
6 changed files with 110 additions and 79 deletions

View File

@@ -1,6 +1,7 @@
#pragma once
#include "String.h"
#include "Text.h"
class File {
FILE* ptr;
public:
@@ -15,6 +16,9 @@ public:
fprintf(ptr, "%s\n", text.getCharArray());
}
~File() {
Close();
}
void Close() {
if (ptr != NULL) {
fclose(ptr);
ptr = NULL;

View File

@@ -3,12 +3,13 @@ using namespace std;
#if __cplusplus >= 201703L
#include <filesystem>
#else
#include <unistd.h>
#endif
#include "CompilationSupervisor.h"
#include "RunSupervisor.h"
#include "Global.h"
#include <unistd.h>
#include <signal.h>
//https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%B3%D0%BD%D0%B0%D0%BB_(Unix)
@@ -20,6 +21,7 @@ void hdl(int sig)
fclose(res);
}
void set_handlers() {
#ifndef _WIN32
struct sigaction act;
memset(&act, 0, sizeof(act));
act.sa_handler = hdl;
@@ -80,7 +82,9 @@ void set_handlers(){
sigaction(SIGVTALRM, &act, 0);
sigaction(SIGXCPU, &act, 0);
sigaction(SIGXFSZ, &act, 0);
#endif
}
int main(int argc, char ** argv)
{
//+
@@ -104,7 +108,12 @@ int main(int argc, char ** argv)
userWorkspace.println();
packageWorkspace.println();
printf("%d\n", maxKernels);
#ifndef _WIN32
int pid = getpid();
#else
int pid = _getpid();
#endif
printf("PID=%d\n", pid);
File pidFile("PID", String(pid));
pidFile.Close();

View File

@@ -22,12 +22,14 @@ public:
virtual String getStatePrefix() {
return String("Running");
}
/*
virtual void Finalize(){
this->state = Archivation;
saveState();
printf("Archivation started\n");
Utils::ZipFolder(String("./"),String("archive.zip"));
printf("Archivation ended\n");
}
*/
};

View File

@@ -74,7 +74,12 @@ public:
sprintf(body, "%d", s);
}
}
String(long s) {
String((long long)s);
}
String(long long s) {
length = 0;
body = new char[1];
body[0] = '\0';
@@ -87,7 +92,7 @@ public:
}
length = size;
body = new char[size + 1];
sprintf(body, "%ld", s);
sprintf(body, "%lld", s);
}
}

View File

@@ -6,6 +6,7 @@
#include <queue>
#include "File.h"
#include "Task.h"
#include "Array.h"
enum SupervisorState {
WorkspacesCreation, //0
@@ -111,6 +112,7 @@ public:
case Execution:
if (task->getState() == WorkspaceReady) {
activeCount++;
task->start_time = Utils::getAbsoluteTime();
task->Start();
}
else if (task->getState() == Running) {
@@ -130,6 +132,7 @@ public:
}
}
void DoWithSchedule(int maxKernels) {
saveState();
@@ -234,10 +237,11 @@ public:
}
virtual void Finalize() {}
void saveState() {
Utils::Sleep(1); //чтобы не было одинаковых по дате файлов.
String stateFile = packageWorkspace + "/state/" + getStatePrefix() + printState();
//printf("stateFile=<%s>\n", stateFile.getCharArray());
File tmp(stateFile, Utils::getDate());
File(stateFile, Utils::getDate());
}
};

View File

@@ -36,11 +36,13 @@ enum TestType {
class Task {
protected:
long id;
int maxtime;
int kernels; //получение зависит от типа задачи.
String workspace;
TaskState state;
public:
long start_time;
String printState(){
switch(state){
case Inactive:
@@ -87,6 +89,7 @@ public:
return "?";
}
}
//-------------->>
long getId() { return id; }
long setId(String* id_s) {
@@ -146,12 +149,16 @@ public:
if (Utils::Exists(workspace + "/TIMEOUT")) {
state = AbortedByTimeout;
//todo определить по интервалу времени на всякий случай.
}
else if (Utils::Exists(workspace + "/INTERRUPT")) {
}else if (Utils::Exists(workspace+"/INTERRUPT")){
state=AbortedByUser;
} else {
long now = Utils::getAbsoluteTime();
long delta = now-start_time;
if (maxtime<delta){
state=AbortedByTimeout;
}
}
}
if (state!=Running){
//-
busyKernels = Utils::min(busyKernels - kernels, maxKernels);