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

📄 shijianpian.h

📁 本算法为时间片轮转法
💻 H
字号:
// RenBinOS.cpp : Defines the entry point for the console application.
//

// Test.cpp : 定义控制台应用程序的入口点。
//

#include <vector>

#ifndef SHIJIANPIAN_H_
#define SHIJIANPIAN_H_

const int QOK=1;
const int QERROR=1;
const int QOVERFLOW=-1;
typedef int Status;



/*时间片轮转算法*/

/* 进程信息 */
typedef  struct ElemType 
{
	char name[10];/*进程名称*/
	int arriveTime;/*进程到达时间*/
	int cpuTime;/*进程所需时间片数*/
	int alreadyTime;/*进程已运行时间片数*/
	int needTime;/*进程完成仍需时间*/
	char state; /*进程状态:"R"运行;"W"等待;"F"完成*/

	ElemType( char* name2, int arrTime, int cpuTime2 )
	{
		memset( name, 0, 10 );
		memcpy( name, name2, 10 );
		arriveTime = arrTime;
		cpuTime = cpuTime2;
		needTime = cpuTime2;
		state = 'W';
	}
	ElemType()
	{
		memset( name, 0, 10 );
		arriveTime = 0;
		cpuTime = 0;
		alreadyTime = 0;
		needTime = 0;
		state = 'W';
	}
	ElemType& operator = ( const ElemType& elem )
	{
		memset( name, 0, 10 );
		memcpy( name, elem.name, 10 );
		arriveTime = elem.arriveTime;
		cpuTime = elem.cpuTime;
		alreadyTime = elem.alreadyTime;
		needTime = elem.needTime;
		state = elem.state;		
		return *this;
	}
}ElemType;

/*结点类型*/
typedef struct PCB 
{
	ElemType data;
	struct PCB  *next;
}PCB,*PCBQueue;

/*链队列类型*/
class LinkQueue { 
public:
	PCBQueue front;  /*队头指针*/
	PCBQueue rear;   /*队尾指针*/
private:
	int totalTime;   /* 运行总时间 */
	int curTime;	 /* 现在运行时间 */
	
	std::vector<ElemType> vecElem;		
	typedef std::vector<ElemType>::const_iterator QCIT;

	ElemType lastElem;
	bool bLastOver;
	int  nZhouzhuanTime;

////////////////////////////////////////////
public:
	LinkQueue();	//初始化
	~LinkQueue();	//销毁

	int GetLength() const;		//队列长度
	int GetTotalTime() const;	//队列运行总时间
	bool IsEmpty() const;		//队列是否为空
	ElemType GetLastRun(){ return lastElem; }		// 上次运行进程

	void SetElemVec( const std::vector<ElemType>& vec );	//加入要运行的进程
	Status EnQueue( ElemType elem );				//入队列
	Status DeQueue( ElemType& elem );				//删对头


	Status RunOnce();		//运行进程
	std::vector<ElemType>::const_iterator NewArrive( int iTime, QCIT it );					//判断是否有新进程入

	void ShowList();
	bool IsLastOver() const { return bLastOver; }
	int  GetLastZhouZhuan() const { return nZhouzhuanTime; }

};

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -