fixed
This commit is contained in:
@@ -112,7 +112,6 @@ public:
|
|||||||
case Execution:
|
case Execution:
|
||||||
if (task->getState() == WorkspaceReady) {
|
if (task->getState() == WorkspaceReady) {
|
||||||
activeCount++;
|
activeCount++;
|
||||||
task->start_time = Utils::getAbsoluteTime();
|
|
||||||
task->Start();
|
task->Start();
|
||||||
}
|
}
|
||||||
else if (task->getState() == Running) {
|
else if (task->getState() == Running) {
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <chrono>
|
||||||
|
|
||||||
#include "File.h"
|
#include "File.h"
|
||||||
#include "Utils.h"
|
#include "Utils.h"
|
||||||
#include "Global.h"
|
#include "Global.h"
|
||||||
@@ -41,8 +43,9 @@ protected:
|
|||||||
int kernels; //получение зависит от типа задачи.
|
int kernels; //получение зависит от типа задачи.
|
||||||
String workspace;
|
String workspace;
|
||||||
TaskState state;
|
TaskState state;
|
||||||
|
std::chrono::system_clock::time_point start_time;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
long long start_time;
|
|
||||||
String printState() {
|
String printState() {
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case Inactive:
|
case Inactive:
|
||||||
@@ -91,6 +94,8 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
//-------------->>
|
//-------------->>
|
||||||
|
void setStart() { start_time = std::chrono::system_clock::now(); }
|
||||||
|
|
||||||
long getId() { return id; }
|
long getId() { return id; }
|
||||||
long setId(String* id_s) {
|
long setId(String* id_s) {
|
||||||
return id = strtol(id_s->getCharArray(), NULL, 10);
|
return id = strtol(id_s->getCharArray(), NULL, 10);
|
||||||
@@ -129,9 +134,9 @@ public:
|
|||||||
|
|
||||||
int getKernels() const { return kernels; }
|
int getKernels() const { return kernels; }
|
||||||
|
|
||||||
virtual void Start(bool dontCheck = false) {
|
void Start(bool dontCheck = false) {
|
||||||
|
|
||||||
if (kernels <= freeKernels || dontCheck) {
|
if (kernels <= freeKernels || dontCheck) {
|
||||||
|
setStart();
|
||||||
system(getStartCommand().getCharArray());
|
system(getStartCommand().getCharArray());
|
||||||
state = Running;
|
state = Running;
|
||||||
//-
|
//-
|
||||||
@@ -149,16 +154,21 @@ public:
|
|||||||
if (Utils::Exists(workspace + "/TIMEOUT")) {
|
if (Utils::Exists(workspace + "/TIMEOUT")) {
|
||||||
state = AbortedByTimeout;
|
state = AbortedByTimeout;
|
||||||
//todo определить по интервалу времени на всякий случай.
|
//todo определить по интервалу времени на всякий случай.
|
||||||
}else if (Utils::Exists(workspace+"/INTERRUPT")){
|
}
|
||||||
|
else if (Utils::Exists(workspace + "/INTERRUPT")) {
|
||||||
state = AbortedByUser;
|
state = AbortedByUser;
|
||||||
} else {
|
}
|
||||||
long long now = Utils::getAbsoluteTime();
|
else {
|
||||||
long long delta = now-start_time;
|
auto end_time = std::chrono::system_clock::now();
|
||||||
if (maxtime<delta){
|
std::chrono::duration<double> diff_time = end_time - start_time;
|
||||||
|
|
||||||
|
if (maxtime * 1.1 < diff_time.count()) {
|
||||||
|
printf("SET STATUS ABORTED by timer to %ld with time %f sec / %f sec", id, diff_time.count(), maxtime * 1.1);
|
||||||
state = AbortedByTimeout;
|
state = AbortedByTimeout;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state != Running) {
|
if (state != Running) {
|
||||||
//-
|
//-
|
||||||
busyKernels = Utils::min(busyKernels - kernels, maxKernels);
|
busyKernels = Utils::min(busyKernels - kernels, maxKernels);
|
||||||
|
|||||||
Reference in New Issue
Block a user