#include #include #include "TaskMan.h" #include "Task.h" #include "String.h" Task::Task() : current(0), state(TASK_ON_HOLD), stopped(false), cleanup(false), suspended(false) { TaskMan::AddTask(this); } Task::~Task() { } 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"; return state; } 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, int flags) { TaskMan::WaitFor(h, this, flags); } void Task::WaitFor(Task * t) { t->wbta.push_back(wbta_t(this)); } void Task::WaitFor(pid_t p) { TaskMan::WaitFor(p, this); } void Task::WaitFor(timeval t, int flags) { TaskMan::WaitFor(t, this, flags); } 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; }