mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
64 lines
1.5 KiB
C++
64 lines
1.5 KiB
C++
#include "Task.h"
|
|
|
|
|
|
namespace UniLib {
|
|
namespace controller {
|
|
Task::Task()
|
|
: mTaskScheduled(false), mFinishCommand(nullptr), mParentTaskPtrArray(nullptr),
|
|
mParentTaskPtrArraySize(0), mDeleted(false), mReferenceCount(1)
|
|
{
|
|
}
|
|
|
|
Task::Task(size_t taskPointerArraySize)
|
|
: mTaskScheduled(false), mFinishCommand(nullptr), mParentTaskPtrArray(new TaskPtr[taskPointerArraySize]), mParentTaskPtrArraySize(taskPointerArraySize),
|
|
mDeleted(false)
|
|
{
|
|
}
|
|
|
|
Task::~Task()
|
|
{
|
|
if (mParentTaskPtrArraySize) {
|
|
delete[] mParentTaskPtrArray;
|
|
}
|
|
mParentTaskPtrArraySize = 0;
|
|
mWorkingMutex.lock();
|
|
mDeleted = true;
|
|
mWorkingMutex.unlock();
|
|
}
|
|
|
|
bool Task::isAllParentsReady()
|
|
{
|
|
bool allFinished = true;
|
|
lock();
|
|
for(size_t i = 0; i < mParentTaskPtrArraySize; i++) {
|
|
TaskPtr task = mParentTaskPtrArray[i];
|
|
if (!task.isNull()) {
|
|
allFinished = false;
|
|
continue;
|
|
}
|
|
if(!task->isTaskFinished()) {
|
|
allFinished = false;
|
|
if(!task->isTaskSheduled())
|
|
mParentTaskPtrArray[i]->scheduleTask(mParentTaskPtrArray[i]);
|
|
}
|
|
}
|
|
unlock();
|
|
return allFinished;
|
|
}
|
|
|
|
void Task::duplicate()
|
|
{
|
|
mReferenceCount++;
|
|
}
|
|
|
|
void Task::release()
|
|
{
|
|
mReferenceCount--;
|
|
if (0 == mReferenceCount) {
|
|
delete this;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
} |