shijianpian.h

来自「本算法为时间片轮转法」· C头文件 代码 · 共 110 行

H
110
字号
// 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 + =
减小字号Ctrl + -
显示快捷键?