alarm.cc

来自「linux的例子,就是下载后到自己的机子上去运行」· CC 代码 · 共 66 行

CC
66
字号
#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 + =
减小字号Ctrl + -
显示快捷键?