
第1页 / 共4页

第2页 / 共4页

第3页 / 共4页

第4页 / 共4页
void Round_Robin() {//时间轮转算法函数 //周转时间总值 //带权周转时间总值 int i = 0; double WT = 0; double WWT = 0; int NowTime = 0; //时刻 // listnodes_list; //链表 Nodes node; for(i = 0;i < n;i++) {//把所有需要的信息一次填充进结点然后放进 list 容器 //结点 node.Index = i; node.AT = ArrivalTime[i]; node.ST = ServiceTime[i]; node.PST = PServiceTime[i]; nodes_list.push_back(node); } while(!nodes_list.empty()) {//当 list 容器不空的时候执行 int index = nodes_list.front().Index;//下标且为序号 cout< = nodes_list.front().ST) {//如果进程已经完成的服务时间不小于服务时间(即已经完成),则标志结束标记, 并且计算要求的量 //标记 Finished[index] = true; s = nodes_list.front().PST - nodes_list.front().ST; int r = q-s;//完成作业需要的时间 FinishTime[index] = NowTime + r; WholeTime[index] = FinishTime[index] - ArrivalTime[index]; //计算周转时间 WeightWholeTime[index] = (double)WholeTime[index]/ServiceTime[index]; //计 //计算结束时间 算带权周转时间 } if(Finished[index]) {//如果进程确认结束 nodes_list.pop_front(); //把该表示进程的结点从容器中删除 if(nodes_list.empty())//如果容器空,则退出 while 循环 break; int r = q-s; NowTime += r;//时刻前进 continue;//如果容器不空,则继续下一个循环 } NowTime += q;//时刻前进 //把 list 容器的第一个进程转移到已经到达的进程的最末 list::iterator iter; list ::iterator iter1 = nodes_list.begin(); list ::iterator iter2 = nodes_list.end(); while(iter1 != iter2) {//查找进程插入的位置 if(iter1->AT <= NowTime) {//如果到达时间不大于现在的时刻,表示已经到达 iter = ++iter1;//让迭代器只向下一位 continue;//继续下一个循环 } else break;//如果进程没有到达,那么跳出循环 } Nodes node = nodes_list.front(); nodes_list.insert(iter,node);//把第一个进程插入到所查找的位置 nodes_list.pop_front();//删除第一个进程 } // for(i = 0;i < n;i++) { WT = WT + WholeTime[i]; WWT = WWT + WeightWholeTime[i]; } AverageWT = WT/n; AverageWWT = WWT/n; //求出平均周转时间 //求出平均带权周转时间 } //====================================================== void Output_Data() {//输出函数 for(int a = 0 ; a < n ; a++) { //<<"时刻"<