📄 优先权.txt
字号:
void CCPUSchedule1Dlg::OnBtnPriority()
{
// TODO: Add your control notification handler code here
int p=I,m,n,q=2,c=1,IWaitTime=0,IRoundTime=0;
float AverageWaitTime,AverageRoundTime;
int WaitTime[50],RoundTime[50]; //假设最多有50个进程
CString str_AverageWaitTime,str_AverageRoundTime;
CProcess turn;
//当没有任何进程而单击该按钮时报错
if(I<1)
MessageBox("没有输入任何进程!");
else
{
//按照优先级冒泡法排序
for(m=0;m<p;m++)
for(n=0;n<p-m;n++)
{
if(process[n].GetPriority()>process[n+1].GetPriority())
{
turn=process[n];
process[n]=process[n+1];
process[n+1]=turn;
}
else
{
if(process[n].GetPriority()==process[n+1].GetPriority())
{
if(process[n].GetArriveOrder()>process[n+1].GetArriveOrder())
{
turn=process[n];
process[n]=process[n+1];
process[n+1]=turn;
}//if
else{}
}//if
else{}
}//else
}//for
//计算等待时间 按照非强占式优先级调度
//计算等待时间
WaitTime[1]=0;
while(q<=p)
{
WaitTime[q]=WaitTime[q-1]+process[q-1].GetServiceTime();
//第q个进程的等待时间=第q-1个进程的等待时间+第q-1个进程的服务时间
q++;
}
for(q=1;q<=p;q++)
IWaitTime=IWaitTime+WaitTime[q];
AverageWaitTime=(float)IWaitTime/p;
//计算周转时间
/* RoundTime[1]=process[1].GetServiceTime();
while(c<=p)
{
RoundTime[c]=WaitTime[c]+process[c].GetServiceTime();
c++;
}
for(c=1;c<=p;c++)
IRoundTime+=RoundTime[c];
AverageRoundTime=(float)IRoundTime/p;*/
for(c=1;c<=p;c++)
{
RoundTime[c]=WaitTime[c]+process[c].GetServiceTime();
IRoundTime+=RoundTime[c];
}
AverageRoundTime=(float)IRoundTime/p;
//输出
str_AverageWaitTime.Format("优先权调度平均等待时间是:%f",AverageWaitTime);
m_cresultshow.AddString(str_AverageWaitTime);
str_AverageRoundTime.Format(" 平均周转时间为:%f",AverageRoundTime);
m_cresultshow.AddString(str_AverageRoundTime);
StringCount++;
if(I<0)
{}//无进程时不输出
else
{
m_request.AddString("优先权调度算法主要用于批处理系统中,\n");
m_request.AddString("也可用于某些对实时要求不严的实时系统中.\n");
}//else
StaAverageWaitTime[1]=AverageWaitTime;
StaAverageRoundTime[1]=AverageRoundTime;
}//else
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -