📄 rr.cpp
字号:
# if !defined(__PCB_H)
#include "CPU\PCB.h"
# endif
# if !defined(__KERNEL_H)
#include "CPU\Kernel.h"
# endif
# if !defined(__READYQUEUE_H)
#include "CPU\ReadyQ~1.h"
# endif
# if !defined(__SCHEDULER_H)
#include "CPU\Schedu~1.h"
# endif
# if !defined(__DOS_H)
#include <dos.h>
# endif
class rrKernel : public kernel
{
public:
PCB* pcb;
int JobStatus;
int TimeSlice;
rrKernel()
{
TimeSlice = 100;
}
void exec()
{
JobStatus = 1;
char ch;
printf("\n\n\n-------------------------------------------\n");
printf(pcb->file);
printf("\n-------------------------------------------\n");
for(int i=0;i<TimeSlice;i++)
{
if( fread(&ch,1,1,pcb->fp) > 0)
{
printf("%c",ch);
}
else
{
ReadyQueue.delPCB(pcb);
break;
}
}
JobStatus = 0;
}
void changePCB(PCB *p)
{
pcb = p;
exec();
}
void ReleaseControl()
{
JobStatus = 0;
}
}rrKernel;
void getJobs();
class RoundRobin : public Scheduler
{
public:
RoundRobin()
{
}
void start()
{
while(ReadyQueue.NoOfJobs)
{
if(!rrKernel.JobStatus)
{
PCB *p = NULL;
for(int i=1 ; i<=ReadyQueue.NoOfJobs ; i++)
{
p = ReadyQueue.getPCB(i);
if(p != NULL)
rrKernel.changePCB(p);
else
getJobs();
}
}
else
break;
}
}
void addJob(char * filename)
{
PCB *p = new PCB(filename);
ReadyQueue.addPCB(p);
}
};
RoundRobin rr;
void getJobs()
{
char command[100] = "";
char file[10][100];
int i=0,TimeSlice=0;
printf("\nEnter TimeSlice for the Job: ");
scanf("%d",&TimeSlice);
rrKernel.TimeSlice = TimeSlice;
while( (strcmp(command,"e")!=0) && (strcmp(command,"E")!=0) )
{
printf("\nPrompt >");
scanf("%s",command);
if( (strcmp(command,"s") ==0) || (strcmp(command,"S")==0) )
{
for(int j=0;j<i;j++)
rr.addJob(file[j]);
i = 0;
rr.start();
}
else
{
strcpy(file[i],command);
i++;
}
if(i>=10)
{
for(int j=0;j<i;j++)
rr.addJob(file[j]);
i=0;
rr.start();
}
}
}
void main()
{
rr = RoundRobin();
getJobs();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -