logic: Fixed bugs in TaskParse scheduling

* Added TaskParse as base for TaskParseCxx and TaskParseJava
* Fixed increment and decrement of indexer_count on blackboard not atomic
* Fixed TaskInjectStorage finished before TaskParse started
* Fixed project not cleared when refreshing on now empty project
* Fixed TaskInjectStorage overheating when nothing to do
This commit is contained in:
Eberhard Graether
2016-10-20 23:02:54 +02:00
parent a388932864
commit 06c7a4e159
12 changed files with 147 additions and 128 deletions
+50
View File
@@ -0,0 +1,50 @@
#include "data/parser/TaskParse.h"
#include "utility/scheduling/Blackboard.h"
TaskParse::TaskParse(
std::shared_ptr<StorageProvider> storageProvider,
std::shared_ptr<FileRegister> fileRegister,
const Parser::Arguments& arguments,
DialogView* dialogView
)
: m_storageProvider(storageProvider)
, m_fileRegister(fileRegister)
, m_arguments(arguments)
, m_dialogView(dialogView)
, m_interrupted(false)
{
}
void TaskParse::doEnter(std::shared_ptr<Blackboard> blackboard)
{
std::lock_guard<std::mutex> lock(blackboard->getMutex());
int indexerCount = 0;
if (blackboard->get("indexer_count", indexerCount))
{
indexerCount++;
blackboard->set("indexer_count", indexerCount);
}
}
void TaskParse::doExit(std::shared_ptr<Blackboard> blackboard)
{
std::lock_guard<std::mutex> lock(blackboard->getMutex());
int indexerCount = 0;
if (blackboard->get("indexer_count", indexerCount))
{
indexerCount--;
blackboard->set("indexer_count", indexerCount);
}
}
void TaskParse::doReset(std::shared_ptr<Blackboard> blackboard)
{
}
void TaskParse::handleMessage(MessageInterruptTasks* message)
{
m_interrupted = true;
}
+42
View File
@@ -0,0 +1,42 @@
#ifndef TASK_PARSE_H
#define TASK_PARSE_H
#include "data/parser/Parser.h"
#include "utility/scheduling/Task.h"
#include "utility/messaging/type/MessageInterruptTasks.h"
#include "utility/messaging/MessageListener.h"
class CxxParser;
class DialogView;
class FileRegister;
class StorageProvider;
class TaskParse
: public Task
, public MessageListener<MessageInterruptTasks>
{
public:
TaskParse(
std::shared_ptr<StorageProvider> storageProvider,
std::shared_ptr<FileRegister> fileRegister,
const Parser::Arguments& arguments,
DialogView* dialogView
);
protected:
virtual void doEnter(std::shared_ptr<Blackboard> blackboard);
virtual void doExit(std::shared_ptr<Blackboard> blackboard);
virtual void doReset(std::shared_ptr<Blackboard> blackboard);
virtual void handleMessage(MessageInterruptTasks* message);
std::shared_ptr<StorageProvider> m_storageProvider;
std::shared_ptr<FileRegister> m_fileRegister;
const Parser::Arguments m_arguments;
DialogView* m_dialogView;
bool m_interrupted;
};
#endif // TASK_PARSE_H