📄 sleep.cpp
字号:
#ifndef SLEEP#define SLEEP#include "movetime.cpp"#include "gettask.cpp"#include "findQ.cpp"void ttSleepUntil(double time) { if (rtsys->running == NULL) { MEX_ERROR("ttSleep(Until): No running task!"); return; } rtsys->running->currentJob->release = time; moveToTimeQ(rtsys->running); rtsys->readyQ->deleteNode(rtsys->readyQ->getLast()); rtsys->running = NULL;}void ttSleepUntil(double time, char *nameOfTask) { TaskNode *tn; Task* task = getTask(nameOfTask); if (task == NULL) { char buf[200]; sprintf(buf, "ttSleep(Until): Non-existent task '%s'!", nameOfTask); MEX_ERROR(buf); return; } if (task->currentJob == NULL) { char buf[200]; sprintf(buf, "ttSleep(Until): No running job of task '%s'!\n", nameOfTask); MEX_ERROR(buf); return; } // Look for task in readyQ tn = findInQ(nameOfTask, rtsys->readyQ); if (tn != NULL) { // Move from readyQ to timeQ tn->getTask()->currentJob->release = time; moveToTimeQ(tn->getTask()); rtsys->readyQ->deleteNode(tn); if (tn->getTask() == rtsys->running) { rtsys->running = NULL; } return; } // Look for task in timeQ tn = findInQ(nameOfTask, rtsys->timeQ); if (tn != NULL) { // Update release time and reorder timeQ tn->getTask()->currentJob->release = time; rtsys->timeQ->deleteNode(tn); moveToTimeQ(tn->getTask()); }}void ttSleep(double duration) { ttSleepUntil(rtsys->time+duration);}void ttSleep(double duration, char *nameOfTask) { ttSleepUntil(rtsys->time+duration, nameOfTask);}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -