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 + -
显示快捷键?