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