?? 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 + -