#include #include #include "TaskMan.h" #include "Task.h" #include "String.h" Task::Task() : state(TASK_ON_HOLD), suspended(false), cleanup(false), current(0) { TaskMan::AddTask(this); } Task::~Task() { TaskMan::RemoveTask(this); } int Task::Do() throw (GeneralException) { return TASK_ON_HOLD; } int Task::Run() { cerr << "Running task '" << GetName() << "'...\n"; try { cerr << "Launching method Do()...\n"; state = Do(); } catch (TaskSwitch) { cerr << "Catch a task switching.\n"; throw; } catch (GeneralException e) { cerr << "Task " << GetName() << " caused an unexpected exception: '" << e.GetMsg() << "', closing it.\n"; return TASK_DONE; } cerr << "Task exitted normally.\n"; return state; } int Task::GetState() { return state; } String Task::GetName() { return "Unknow Task"; } void Task::Suspend() throw (GeneralException) { cerr << "Suspending task " << GetName() << "...\n"; suspended = true; throw TaskSwitch(); } void Task::WaitFor(Handle * h) { w4ha.push_back(h); } void Task::WaitFor(Task * t) { w4ta.push_back(t); } void Task::WaitFor(pid_t p) { w4pr.push_back(p); } void Task::WaitFor(timeval t) { w4to.push_back(t); } void Task::SetBurst() { state = TASK_BURST; } void Task::SetCleanUp() { cleanup = true; } bool Task::HasToClean() { return cleanup; } void Task::Stop() { stopped = true; } void Task::Restart() { stopped = false; } bool Task::IsStopped() { return stopped; }