📄 alarm.cc
字号:
#include "copyright.h"
#include "Alarm.h"
#include "system.h"
void loopwhile(int which)
{
while(alarmclock->Getpausenum()!=0)
{
currentThread->Yield();
}
currentThread->Finish();
}
Alarm::Alarm(char *debugName)
{
name = debugName;
pausenum = 0;
alarm_queue = new List;
}
void
Alarm::Pause(int howLong)
{
pausenum ++;
if(pausenum ==1){
Thread *t = new Thread("while yeile thread");
t->Fork(loopwhile,0);
}
if(howLong <= 0)
return;
timeLeft = stats->totalTicks+howLong*TimerTicks*10000;
thread = currentThread;
alarm_queue->SortedInsert(currentThread, timeLeft);
IntStatus oldLevel = interrupt->SetLevel(IntOff);
currentThread->Sleep();
(void) interrupt->SetLevel(oldLevel);
}
void
Alarm::WakeUp()
{
Thread* thread1;
int ptime=-1;
IntStatus oldLevel1 = interrupt->SetLevel(IntOff);
thread1 = (Thread*) alarm_queue->SortedRemove(&ptime);
(void) interrupt->SetLevel(oldLevel1);
while(thread1!=NULL){
if(stats->totalTicks >=ptime )
{
scheduler->ReadyToRun(thread1);
pausenum--;
IntStatus oldLevel2 = interrupt->SetLevel(IntOff);
thread1 = (Thread*) alarm_queue->SortedRemove(&ptime);
(void) interrupt->SetLevel(oldLevel2);
continue;
}
else {
IntStatus oldLevel3 = interrupt->SetLevel(IntOff);
alarm_queue->SortedInsert(thread1,ptime);
(void) interrupt->SetLevel(oldLevel3);
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -