/* * Task.cpp * * Created on: 31.10.2010 * Author: sven */ #include "Task.h" #include Task::Task() { // TODO Auto-generated constructor stub } Task::Task(char* name,int c,int p,int d) :m_Name(name),m_origC(c),m_origP(p),m_origD(d),m_actC(c),m_actD(d) ,m_stepCounter(0),m_absoluteStepCounter(0) { // this->dump(); } Task::~Task() { // TODO Auto-generated destructor stub } void Task::dump() const { cout << "Task: " << m_Name << " " << m_origC << " " << m_origP << " " << m_origD << endl; } void Task::dumpStep() const { cout << endl << m_Name << " actD " << m_actD << " actC " << m_actC << " stepcounter " << m_stepCounter; } void Task::execute() { // if (m_actC <= 0) { // cout << " " << getName() << " execute error: actC <= 0 : " << m_actC << endl; // } else { // m_actC--; // } // if (m_actD < 0) { // cout << " " << getName() << " execute error: actD < 0 : " << m_actD; // } else { // m_actD--; // } m_actC--; m_actD--; m_stepCounter++; m_absoluteStepCounter++; checkPeriod(); cout << getName(); } void Task::requeue() { // if (m_actD < 0) { // cout << " " << getName() << " requeue error: actD < 0 : " << m_actD; // } else { // m_actD--; // } if(m_actC > 0) { m_actD--; } m_stepCounter++; m_absoluteStepCounter++; checkPeriod(); } void Task::checkPeriod() { if(m_stepCounter == m_origP) { if( (m_actC > 0) && (m_actD > 0) ) { cout << " deadline miss "; dumpStep(); } m_stepCounter = 0; m_actC = m_origC; m_actD = m_origD; } } int Task::getNextDeadline() { double numDeadlines = std::floor(static_cast(m_absoluteStepCounter) / static_cast(m_origD)); double nextDeadline = m_origD * (numDeadlines+1); cout << "Next deadline of task " <(nextDeadline); }