#include #include "Task.h" #include "String.h" Task::Task() : state(TASK_ON_HOLD), suspended(false) {} 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"; 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(struct timeval t) { w4to.push_back(t); }