📄 rr.txt
字号:
void CCPUSchedule1Dlg::OnBtnRR()
{
// TODO: Add your control notification handler code here
int p=I,waittime=0,int_roundtime=0,c=2,m,n;
int mem_q,q=1,t=1;
//int_littletime时间片,q表示第几个进程,
//p为目前进程总数,mem_q用来记录q的位置,t
int mem_servicetime[20];
//mem_servicetime 该数组用来记录进程服务时间
float AverageWaitTime,AverageRoundTime;
CString str_averagewaittime,str_averageroundtime,str_int_littletime,
str_allwaittime,str_allroundtime,str_allprocess,str_explain;
CProcess test; //注意类型不要忘了C
if(I<1)
MessageBox("没有输入任何进程!");
//当没有任何进程而单击该按钮时报错
else
{
while(t<=p)
//将各个进程的服务时间保存在mem_servicetime数组中,以便后面用到
{
mem_servicetime[t]=process[t].GetServiceTime();
t++;
}//while
//以下为用冒泡法按照到达时间对进程进行排序
for(m=0;m<p-1;m++)
for(n=1;n<=p-m-1;n++)
{
if(process[n].GetArriveOrder()>process[n+1].GetArriveOrder())
{
test=process[n];
process[n]=process[n+1];
process[n+1]=test;
}//if
else
{
}
}//for
//计算等待时间
while(p>=1)
//用循环分配的方法分配时间片,并记录等待时间
{
for(q=1;q<=p;q++)
{
if(process[q].GetServiceTime()<=Littletime)
//某进程剩余的服务时间<=时间片
{
waittime=(p-1)*process[q].GetServiceTime();
int_roundtime=process[q].GetServiceTime()*p;
//周转时间增值
process[q].SetServiceTime(0);
//经过本次分配后,进程完全分配完了,将服务时间设置为0,
//以便于下次循环
mem_q=q; //用mem_q记录q的位置
while(q<p)
//第q个进程之后的进程向前移动
{
process[q]=process[q+1];
q++;
}//while
p=p-1; //结束一个进程,目前进程总数减去1
q=mem_q; //q回到原来的位置
}//if
else
{
waittime=(p-1)*Littletime;
process[q].SetServiceTime(process[q].GetServiceTime()-Littletime);
//每当分配一次时间片,就将服务时间减去时间片
int_roundtime=Littletime*p;
}//else
WT=WT+waittime;
RT=RT+int_roundtime;
}//for
if(q==p)
q=1; //如果到了最后一个进程还没有完全完成所有进程,还要从头重新开始分配时间片
}//while
AverageWaitTime=(float)WT/I;
AverageRoundTime=(float)RT/I;
while(t<=p)
//还原,将各个进程的服务时间从mem_servicetime数组中取出来放回到
//process[t].GetServiceTime()中,以便后面用到
{
mem_servicetime[t]=process[t].GetServiceTime();
t++;
}//while
//输出结果
str_explain.Format("为了简化算法,进程的默认到达时间都是0");
m_cresultshow.AddString(str_explain);
// m_cresultshow.AddString(str_int_littletime);
str_averagewaittime.Format("RR算法的平均等待时间是:%f",AverageWaitTime);
m_cresultshow.AddString(str_averagewaittime);
str_averageroundtime.Format("RR算法的平均周转时间是:%f",AverageRoundTime);
m_cresultshow.AddString(str_averageroundtime);
StringCount++;
}//else
StaAverageWaitTime[2]=AverageWaitTime; ////全局评价数组
StaAverageRoundTime[2]=AverageRoundTime;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -