jcbview.cpp
来自「本程序使用VC++6.0主要完成操作系统的作业调度包括时间片轮转法,先进现出算法」· C++ 代码 · 共 883 行 · 第 1/2 页
CPP
883 行
Stack[k]=g;
k++;
}
}
g++;
}
tStartTime = Fjobs[p].StartTime ;
tEndTime = Fjobs[p].FinishTime ;
//
// char msg[50];
// sprintf (msg,"Queue=%d,%d,%d,%d,%d,Stack=%d,%d,%d,%d,%d",Queue[0],Queue[1],Queue[2],Queue[3],Queue[4],Stack[0],Stack[1],Stack[2],Stack[3],Stack[4]);
// AfxMessageBox(_T(msg));
// sprintf (msg,"[0].Start=[%d],[0].Fininsh=[%d],k=[%d]",Fjobs[0].StartTime,Fjobs[0].FinishTime,k );
// AfxMessageBox(_T(msg));
//
g=k-1;
while (g>0)
{
b=0;
d=0;
while (d<g)
{
u1=Stack[d];
e= Stack[d+1];
if (Fjobs[u1].ReqTime >= Fjobs[e].ReqTime )
{
i=Stack[d];
Stack[d]=Stack[d+1];
Stack[d+1]=i;
b=d;
}
// sprintf (msg,"Queue=%d,%d,%d,%d,%d,Stack=%d,%d,%d,%d,%d",Queue[0],Queue[1],Queue[2],Queue[3],Queue[4],Stack[0],Stack[1],Stack[2],Stack[3],Stack[4]);
// AfxMessageBox(_T(msg));
// sprintf (msg,"g=[%d],d=[%d],e=[%d],k=[%d]",g,d,e,k );
// AfxMessageBox(_T(msg));
d++;
}
g=b;
}
//
//
g=0;
while (g<k)
{
PrinterNO = 4 ;
TapeNO = 3 ;
MEMvol = 100 ;
d=g;
while (d<k)
{
u1=Stack[d];
if (Fjobs[u1].ReqMEM <= MEMvol && Fjobs[u1].ReqPrinter <= PrinterNO)
{
PrinterNO = 4 - Fjobs[u1].ReqPrinter ;
TapeNO = 3 - Fjobs[u1].ReqTape ;
MEMvol = 100 - Fjobs[u1].ReqMEM ;
e=d;
u1=Stack[d];
while (e>g+1)
{
Stack[e]=Stack[e-1];
e--;
}
Stack[e]=u1;
// sprintf (msg,"Queue=%d,%d,%d,%d,%d,Stack=%d,%d,%d,%d,%d",Queue[0],Queue[1],Queue[2],Queue[3],Queue[4],Stack[0],Stack[1],Stack[2],Stack[3],Stack[4]);
// AfxMessageBox(_T(msg));
// sprintf (msg,"g=[%d],d=[%d],e=[%d],k=[%d]",g,d,e,k );
// AfxMessageBox(_T(msg));
}
d++;
}
g++;
}
/**/
// Stack处理
g=0;
while (g<k)
{
Queue[j]=Stack[g];
u1=Stack[g];
Fjobs[u1].StartTime = tTemp;
Fjobs[u1].FinishTime = Fjobs[u1].StartTime + Fjobs[u1].ReqTime ;
tTemp = Fjobs[u1].FinishTime ;
j++;
g++;
}
k=0;
//
p++;
}
return 0;
}
// ================================================================================
//
// Priority Scheduling
//
// ================================================================================
int jPri(TJCB Fjobs[],int nJobs)
{
int p,j,k,g,u1; //
int e,d,i,b; // 排序用变量
// int tMAX;
int tStartTime,tEndTime,tTemp;
int PrinterNO=4;
int TapeNO=3;
int MEMvol=100;
// char msg[50];
p=0;
j=0;
k=0;
g=0;
tStartTime = Fjobs[0].InputTime - 1;
tEndTime = Fjobs[0].InputTime + 1;
tTemp = Fjobs[0].InputTime ;
PrinterNO = 4 ;//- Fjobs[0].ReqPrinter ;
TapeNO = 3 ;//- Fjobs[0].ReqTape ;
MEMvol = 100 ;//- Fjobs[0].ReqMEM ;
Fjobs[0].StartTime = Fjobs[0].InputTime ;
// Fjobs[0].FinishTime = Fjobs[0].StartTime + Fjobs[0].ReqTime ;
while (p<nJobs)
{
// 顺序处理
g = 0;
k = 0;
while (g<nJobs)
{
if (Fjobs[g].InputTime > tStartTime && Fjobs[g].InputTime <= tEndTime)
{
if (Fjobs[g].ReqMEM <= MEMvol && Fjobs[g].ReqPrinter <= PrinterNO)
{
Queue[j]=g;
Fjobs[g].StartTime = tTemp;
Fjobs[g].FinishTime = Fjobs[g].StartTime + Fjobs[g].ReqTime ;
tTemp = Fjobs[g].FinishTime ;
j++;
PrinterNO = 4 - Fjobs[g].ReqPrinter ;
TapeNO = 3 - Fjobs[g].ReqTape ;
MEMvol = 100 - Fjobs[g].ReqMEM ;
}
else
{
Stack[k]=g;
k++;
}
}
g++;
}
tStartTime = Fjobs[p].StartTime ;
tEndTime = Fjobs[p].FinishTime ;
//
// char msg[50];
// sprintf (msg,"Queue=%d,%d,%d,%d,%d,Stack=%d,%d,%d,%d,%d",Queue[0],Queue[1],Queue[2],Queue[3],Queue[4],Stack[0],Stack[1],Stack[2],Stack[3],Stack[4]);
// AfxMessageBox(_T(msg));
// sprintf (msg,"[0].Start=[%d],[0].Fininsh=[%d],k=[%d]",Fjobs[0].StartTime,Fjobs[0].FinishTime,k );
// AfxMessageBox(_T(msg));
//
g=k-1;
while (g>0)
{
b=0;
d=0;
while (d<g)
{
u1=Stack[d];
e= Stack[d+1];
if ((Fjobs[u1].ReqTime<<4)/(tTemp - Fjobs[u1].InputTime ) >= (Fjobs[e].ReqTime<<4)/(tTemp - Fjobs[e].InputTime))
{
i=Stack[d];
Stack[d]=Stack[d+1];
Stack[d+1]=i;
b=d;
}
// sprintf (msg,"Queue=%d,%d,%d,%d,%d,Stack=%d,%d,%d,%d,%d",Queue[0],Queue[1],Queue[2],Queue[3],Queue[4],Stack[0],Stack[1],Stack[2],Stack[3],Stack[4]);
// AfxMessageBox(_T(msg));
// sprintf (msg,"g=[%d],d=[%d],e=[%d],k=[%d]",g,d,e,k );
// AfxMessageBox(_T(msg));
d++;
}
g=b;
}
//
//
g=0;
while (g<k)
{
PrinterNO = 4 ;
TapeNO = 3 ;
MEMvol = 100 ;
d=g;
while (d<k)
{
u1=Stack[d];
if (Fjobs[u1].ReqMEM <= MEMvol && Fjobs[u1].ReqPrinter <= PrinterNO)
{
PrinterNO = 4 - Fjobs[u1].ReqPrinter ;
TapeNO = 3 - Fjobs[u1].ReqTape ;
MEMvol = 100 - Fjobs[u1].ReqMEM ;
e=d;
u1=Stack[d];
while (e>g+1)
{
Stack[e]=Stack[e-1];
e--;
}
Stack[e]=u1;
// sprintf (msg,"Queue=%d,%d,%d,%d,%d,Stack=%d,%d,%d,%d,%d",Queue[0],Queue[1],Queue[2],Queue[3],Queue[4],Stack[0],Stack[1],Stack[2],Stack[3],Stack[4]);
// AfxMessageBox(_T(msg));
// sprintf (msg,"g=[%d],d=[%d],e=[%d],k=[%d]",g,d,e,k );
// AfxMessageBox(_T(msg));
}
d++;
}
g++;
}
/**/
// Stack处理
g=0;
while (g<k)
{
Queue[j]=Stack[g];
u1=Stack[g];
Fjobs[u1].StartTime = tTemp;
Fjobs[u1].FinishTime = Fjobs[u1].StartTime + Fjobs[u1].ReqTime ;
tTemp = Fjobs[u1].FinishTime ;
j++;
g++;
}
k=0;
//
p++;
}
return 0;
}
void CJCBView::OnMenuEdit()
{
// TODO: Add your command handler code here
CJCBDlg jcbDlg;
// jcbDlg.PostMessage(WM_INITDIALOG);
if (jcbDlg.DoModal()==IDOK)
{
// AfxMessageBox(_T("IDOK"));
}
}
void CJCBView::OnFCFS()
{
// TODO: Add your command handler code here
// TODO: Add your command handler code here
int i=0;
int Total=0;
double dx1;
px=50;
dx=50;
BrushNO=0;
// Jobs=4;
RunTime=0;
StartTime=Tjobs[0].InputTime;
for (i=0;i<Jobs;i++)
{
RunTime=RunTime+Tjobs[i].ReqTime;
}
Tjobs[Jobs].FinishTime = RunTime + StartTime;
jFCFS(Tjobs,Jobs);
for (i=0;i<Jobs;i++)
{
dx1=(600/(double)RunTime)*(double)(Tjobs[i].InputTime-StartTime)+51;
Tjobs[i].InputPos=(int)dx1;
dx1=(600/(double)RunTime)*(double)(Tjobs[i].StartTime-StartTime)+51;
Tjobs[i].StartPos=(int)dx1;
dx1=(600/(double)RunTime)*(double)(Tjobs[i].FinishTime-StartTime)+50;
Tjobs[i].EndPos=(int)dx1;
Tjobs[i].InputHour = Tjobs[i].InputTime/60;
Tjobs[i].InputMinute = Tjobs[i].InputTime%60;
Tjobs[i].StartHour = Tjobs[i].StartTime/60;
Tjobs[i].StartMinute = Tjobs[i].StartTime%60;
Tjobs[i].IsInput=FALSE;
Tjobs[i].IsStart=FALSE;
Tjobs[i].IsFinish=FALSE;
Total=Total+(Tjobs[i].FinishTime-Tjobs[i].InputTime);
}
fx=Total;
// char msg[50];
// sprintf (msg,"StartPos=[%d],InputPos=[%d]",Tjobs[0].StartPos,Tjobs[0].InputPos);
// AfxMessageBox(_T(msg));
// Tjobs[0].StartPos=51;
// Tjobs[0].InputPos=51;
SetTimer(1,1,NULL);
}
void CJCBView::OnSJF()
{
// TODO: Add your command handler code here
// TODO: Add your command handler code here
int i=0;
int Total=0;
double dx1;
px=50;
dx=50;
BrushNO=0;
// Jobs=4;
RunTime=0;
StartTime=Tjobs[0].InputTime;
for (i=0;i<Jobs;i++)
{
RunTime=RunTime+Tjobs[i].ReqTime;
}
Tjobs[Jobs].FinishTime = RunTime + StartTime;
jSJF(Tjobs,Jobs);
for (i=0;i<Jobs;i++)
{
dx1=(600/(double)RunTime)*(double)(Tjobs[i].InputTime-StartTime)+51;
Tjobs[i].InputPos=(int)dx1;
dx1=(600/(double)RunTime)*(double)(Tjobs[i].StartTime-StartTime)+51;
Tjobs[i].StartPos=(int)dx1;
dx1=(600/(double)RunTime)*(double)(Tjobs[i].FinishTime-StartTime)+50;
Tjobs[i].EndPos=(int)dx1;
Tjobs[i].InputHour = Tjobs[i].InputTime/60;
Tjobs[i].InputMinute = Tjobs[i].InputTime%60;
Tjobs[i].StartHour = Tjobs[i].StartTime/60;
Tjobs[i].StartMinute = Tjobs[i].StartTime%60;
Tjobs[i].IsInput=FALSE;
Tjobs[i].IsStart=FALSE;
Tjobs[i].IsFinish=FALSE;
Total=Total+(Tjobs[i].FinishTime-Tjobs[i].InputTime);
}
fx=Total;
// char msg[50];
// sprintf (msg,"StartPos=[%d],InputPos=[%d]",Tjobs[0].StartPos,Tjobs[0].InputPos);
// AfxMessageBox(_T(msg));
// Tjobs[0].StartPos=51;
// Tjobs[0].InputPos=51;
SetTimer(1,1,NULL);
}
void CJCBView::OnPri()
{
// TODO: Add your command handler code here
// TODO: Add your command handler code here
int i=0;
int Total=0;
double dx1;
px=50;
dx=50;
BrushNO=0;
// Jobs=4;
RunTime=0;
StartTime=Tjobs[0].InputTime;
for (i=0;i<Jobs;i++)
{
RunTime=RunTime+Tjobs[i].ReqTime;
}
Tjobs[Jobs].FinishTime = RunTime + StartTime;
jPri(Tjobs,Jobs);
for (i=0;i<Jobs;i++)
{
dx1=(600/(double)RunTime)*(double)(Tjobs[i].InputTime-StartTime)+51;
Tjobs[i].InputPos=(int)dx1;
dx1=(600/(double)RunTime)*(double)(Tjobs[i].StartTime-StartTime)+51;
Tjobs[i].StartPos=(int)dx1;
dx1=(600/(double)RunTime)*(double)(Tjobs[i].FinishTime-StartTime)+50;
Tjobs[i].EndPos=(int)dx1;
Tjobs[i].InputHour = Tjobs[i].InputTime/60;
Tjobs[i].InputMinute = Tjobs[i].InputTime%60;
Tjobs[i].StartHour = Tjobs[i].StartTime/60;
Tjobs[i].StartMinute = Tjobs[i].StartTime%60;
Tjobs[i].IsInput=FALSE;
Tjobs[i].IsStart=FALSE;
Tjobs[i].IsFinish=FALSE;
Total=Total+(Tjobs[i].FinishTime-Tjobs[i].InputTime);
}
fx=Total;
// char msg[50];
// sprintf (msg,"StartPos=[%d],InputPos=[%d]",Tjobs[0].StartPos,Tjobs[0].InputPos);
// AfxMessageBox(_T(msg));
// Tjobs[0].StartPos=51;
// Tjobs[0].InputPos=51;
SetTimer(1,1,NULL);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?