⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rr.txt

📁 CPU调度源码分类介绍。我做课程设计是用到的。拿出分享。
💻 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 + -