++
исправления планировщика
This commit is contained in:
@@ -28,7 +28,7 @@ template <class T>
|
||||
class Supervisor : public Array <T> {
|
||||
protected:
|
||||
SupervisorState state;
|
||||
|
||||
bool killed;
|
||||
public:
|
||||
virtual String getStatePrefix() {
|
||||
return String("");
|
||||
@@ -48,11 +48,16 @@ public:
|
||||
}
|
||||
}
|
||||
//-
|
||||
void ToLog(const String& text){
|
||||
FILE * pfile = fopen("planner_log.txt", "a");
|
||||
fprintf(pfile, "%s\n", text.getCharArray());
|
||||
fclose(pfile);
|
||||
}
|
||||
//--
|
||||
void print() {
|
||||
for (auto& elem : this->getElements())
|
||||
elem->print();
|
||||
}
|
||||
|
||||
void init(const char* fileName, int recordSize) {
|
||||
state = WorkspacesCreation;
|
||||
File* packedTasks = new File(fileName);
|
||||
@@ -162,7 +167,7 @@ public:
|
||||
|
||||
auto timer_pause = Utils::getAbsoluteTime();
|
||||
auto timer_killed = Utils::getAbsoluteTime();
|
||||
bool killed = false;
|
||||
killed = false;
|
||||
|
||||
while (activeTasks) {
|
||||
long oldActiveTasks = activeTasks;
|
||||
@@ -231,15 +236,17 @@ public:
|
||||
// прошло больше 10 секунд, проверяем нужно ли завершиться
|
||||
if (Utils::getAbsoluteTime() - timer_killed > 10) {
|
||||
if (checkKilled()) {
|
||||
printf("killed\n");
|
||||
|
||||
ToLog("killed");
|
||||
while (busyKernels) {
|
||||
printf("waiting for activeTasks %lu\n", activeTasks);
|
||||
ToLog("activeTasks="+ String((int)activeTasks)+";busyKernels="+String((int)busyKernels));
|
||||
checkTasksFinish(activeTaskSet, toDel, activeTasks, done, busyKernels, buf);
|
||||
// очищаем завершенные задачи
|
||||
for (auto& del : toDel)
|
||||
activeTaskSet.erase(del);
|
||||
toDel.clear();
|
||||
Utils::Sleep(5);
|
||||
}
|
||||
|
||||
printf("exit for main while\n");
|
||||
ToLog("exit for main while");
|
||||
killed = true;
|
||||
break;
|
||||
}
|
||||
@@ -251,17 +258,19 @@ public:
|
||||
for (auto& task : taskList)
|
||||
task->copyResults(pathRes);
|
||||
}
|
||||
|
||||
changeState();
|
||||
String outFile(pathRes + "/" + getStatePrefix() + "Info.txt");
|
||||
File tmp(outFile, String(buf.c_str()));
|
||||
//скопировать в результаты лог планировщика.
|
||||
if (killed){
|
||||
ToLog("quit application");
|
||||
std::exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
void saveState() {
|
||||
String stateFile = packageWorkspace + "/state/" + getStatePrefix() + printState();
|
||||
File tmp(stateFile, Utils::getDate());
|
||||
}
|
||||
|
||||
void saveProgress(long long persentDone) {
|
||||
FILE* f = fopen("progress", "w");
|
||||
if (f) {
|
||||
@@ -270,15 +279,12 @@ public:
|
||||
fclose(f);
|
||||
}
|
||||
}
|
||||
|
||||
bool checkPause() const {
|
||||
return Utils::Exists("pause");
|
||||
}
|
||||
|
||||
bool checkKilled() const {
|
||||
return Utils::Exists("kill");
|
||||
}
|
||||
|
||||
void checkTasksFinish(const set<T*>& activeTaskSet, vector<T*>& toDel, size_t& activeTasks,
|
||||
size_t& done, int& busyKernels, string& buf) {
|
||||
// проверяем нет ли завершившихся задач
|
||||
|
||||
@@ -1 +1 @@
|
||||
18
|
||||
20
|
||||
Reference in New Issue
Block a user