setperiod.cpp

来自「一个很棒的网络控制系统仿真软件」· C++ 代码 · 共 60 行

CPP
60
字号
#ifndef SET_PERIOD#define SET_PERIOD#include "gettask.cpp"#include "findQ.cpp"#include "moveready.cpp"// Setting period of a specific taskvoid ttSetPeriod(double newPeriod, char *nameOfTask) {    TaskNode *tn;  Task* task = getTask(nameOfTask);    if (task == NULL) {    char buf[200];    sprintf(buf, "ttSetPeriod: Non-existent task '%s'!", nameOfTask);    MEX_ERROR(buf);    return;  }    if (task->perTimer == NULL) {    char buf[200];    sprintf(buf, "ttSetPeriod: Task '%s' not periodic!", nameOfTask);    MEX_ERROR(buf);    return;  }  double lastStart = task->perTimer->time - task->perTimer->period;  double newTime = lastStart + newPeriod;  task->perTimer->time = newTime;  task->perTimer->period = newPeriod;  // Update timerQ  TimerNode* tin = (TimerNode*) rtsys->timerQ->getLast();  while (tin->getTimer() != task->perTimer) {    tin = (TimerNode*) tin->getPrev();  }  rtsys->timerQ->removeNode(tin);  rtsys->timerQ->insertSorted(tin);  // Reshuffle readyQ?  tn = findInQ(nameOfTask, rtsys->readyQ);  if (tn != NULL) {    rtsys->readyQ->deleteNode(tn);    moveToReadyQ(task);  }}// Setting period of calling taskvoid ttSetPeriod(double newPeriod) {    if(rtsys->executing == NULL) {    MEX_ERROR("ttSetPeriod: No running task!");    return;  }  ttSetPeriod(newPeriod, rtsys->executing->name);}#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?