C++ ssd5 12 optional exercise2

#pragma once
#ifndef FIFO_H
#define FIFO_H
#include"simulator.h"

class fifo : public simulator
{
public:
fifo(int second_per_page);
virtual void simulate(string file);
//virtual void addevent(event e);

private:

//queue<event> wait;
};

#endif

#include "event.h"
#include "fifo.h"

fifo::fifo(int second_per_page) : simulator(second_per_page) {}

void fifo::simulate(string file)
{
loadworkload(file);//注意此处如果在fifo类中有私有的queue<event>将会初始化次对象而不是simulotor中的对象

int latency = 0;//每个客户的服务时间
int aggregate = 2;//服务完成时间
int time;//进队时间
int page;//wait类中的头元素页数
string name;//同上,此处三个变量是为了判断服务时wait中有无服务完成队首元素

queue<event> wait;//服务队列
event ev = event(job(0,""),0);
wait.push(ev);
int count = 0;
while (count < 100)//这个。。。想不到一个合适的变量来判定
{
if (!workload.empty())
{
while (count == workload.front().arrival_time())//进入服务队列
{
wait.push(workload.front());

cout << "arriving: " << workload.front().getjob().getnumpages() << " pages from " << workload.front().getjob().getuser() << " at " << count << "second" << endl;

workload.pop();
if (workload.empty())
break;

}
}

if (!wait.empty())
{
page = wait.front().getjob().getnumpages();
name = wait.front().getjob().getuser();
time = wait.front().arrival_time();

if (count == aggregate)
{
wait.pop();//服务时,轮到该元素时正值上一元素刚好完成,将其出队
if (!wait.empty())
{
cout << "servicing: " << wait.front().getjob().getnumpages() << " pages from " << wait.front().getjob().getuser() << " at " << count << " second" << endl;
latency = seconds_per_page*wait.front().getjob().getnumpages();
}
}
}

if (!wait.empty())
{
if (page != wait.front().getjob().getnumpages() || name != wait.front().getjob().getuser() || time != wait.front().arrival_time())
aggregate += latency;
}

count++;

}

}

时间: 2024-10-11 10:43:05

C++ ssd5 12 optional exercise2的相关文章

C++ ssd5 25 optional exercise 6

// parts.h #ifndef _PARTS_H_#define _PARTS_H_ #include <vector>#include <map>#include <string>#include <iostream> using namespace std; //**************** Part ****************class Part { private: static int count; public: string n

C++ ssd5 16 optional exercise 3

#ifndef GRID_H#define GRID_H #include <string>#include <vector> using namespace std; /** IMPORTANT NOTE:** For this assignment, you might need to add state to the* class and/or argment existing methods, and/or create private helper* methods, b

C++ ssd5 27 optional exercise 7

#include "RailSystem.h" void RailSystem::reset(void) { // TODO: reset the data objects of the // City objects' contained in cities map<string, City*>::iterator iter; for (iter = cities.begin(); iter != cities.end(); iter++) { iter->seco

HFile存储格式

Table of Contents HFile存储格式 Block块结构 HFile存储格式 HFile是參照谷歌的SSTable存储格式进行设计的.全部的数据记录都是通过它来完毕持久化,其内部主要採用分块的方式进行存储,如图所看到的: 每一个HFile内部包括多种不同类型的块结构,这些块结构从逻辑上来讲可归并为两类.分别用于数据存储和数据索引(简称数据块和索引块),当中数据块包括: (1) DATA_BLOCK:存储表格数据 (2) BLOOM_CHUNK:存储布隆过滤器的位数组信息 (3)

UITableView的创建及其一些常用方法

UITableView,它的数据源继承于UITableViewDataSource,它的委托UITableViewDelegate. 一.UITableView的创建 1.代码方式: 1 UITableView *tableView=[[UITableView alloc]initWithFrame:[[UIScreen mainScreen]bounds]]; 2 tableView.backgroundColor=[UIColor grayColor]; 3 [self.view addSu

Android测试:从零开始2——local单元测试

上一篇分析了android项目的测试分类,这一篇讲local单元测试. 参考android官方文档. 测试前需要配置测试环境,新建项目后,目录下会出现app/src/test/java/文件夹,这个文件夹是用于存放local单元测试代码的(就是与androidAPI无关的测试). 在build.gradle配置文件中增加测试依赖: dependencies { // Required -- JUnit 4 framework testCompile 'junit:junit:4.12' // O

Android单元测试与模拟测试详解

测试与基本规范 为什么需要测试? 为了稳定性,能够明确的了解是否正确的完成开发. 更加易于维护,能够在修改代码后保证功能不被破坏. 集成一些工具,规范开发规范,使得代码更加稳定( 如通过 phabricator differential 发diff时提交需要执行的单元测试,在开发流程上就可以保证远端代码的稳定性). 2. 测什么? 一般单元测试: 列出想要测试覆盖的异常情况,进行验证. 性能测试. 模拟测试: 根据需求,测试用户真正在使用过程中,界面的反馈与显示以及一些依赖系统架构的组件的应用测

UniBeast: Install OS X El Capitan on Any Supported Intel-based PC

The following guide is a complete walkthrough for updating to or installing a fresh version of OS X El Capitan. It requires no experience and all of the basic installation and post-installation tools are available on tonymacx86.com. Table of Contents

UI进阶--Quartz2D和触摸事件的简单使用:手势解锁

需求:实现一个简易的手势解锁应用,具体效果如下图所示: 实现步骤: 1.代码创建界面,自定义一个view,设置view的背景,颜色等属性: 2.在自定义的view中,定义2个属性,一个是存储被选中按钮的可变数组,另外一个是最后的触摸点(CGPoint); 3.重写initWithFrame方法,在这里,自定义一个方法给initWithFrame方法调用即可,这个自定义的方法里,初始化9个按钮,设置每个按钮的tag,正常状态下的图片以及选中状态的图片,并设置和用户的交互为NO: 4.在自定义的vi