#include #include #include "TaskMan.h" #include "Task.h" #include "String.h" Task::Task() : current(0), state(TASK_ON_HOLD), stopped(false), suspended(false), wbta(0) { TaskMan::AddTask(this); } Task::~Task() { TaskMan::RemoveFromWatches(this); } int Task::Do() throw (GeneralException) { return TASK_ON_HOLD; } int Task::Run() { try { state = Do(); } catch (TaskSwitch) { return state; } catch (GeneralException e) { cerr << "Task " << GetName() << " caused an unexpected exception: \"" << e.GetMsg() << "\". Terminating.\n"; return TASK_DONE; } return state; } int Task::GetState() { return state; } String Task::GetName() { return "Unknow Task"; } void Task::Suspend(int newstate) throw (GeneralException) { if (newstate != -1) { state = newstate; } suspended = true; throw TaskSwitch(); } void Task::WaitFor(Handle * h, int flags) { h->SetNonBlock(); TaskMan::WaitFor(h, this, flags); } void Task::WaitFor(Task * t) { t->wbta = 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::Stop() { stopped = true; } void Task::Restart() { stopped = false; } bool Task::IsStopped() { return stopped; } Task * Task::WaitedBy() { return wbta; }