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

📄 osdlg.h

📁 操作系统实验实现进程调度 包括多种算法
💻 H
字号:
// OSDlg.h : header file
//

#if !defined(AFX_OSDLG_H__58E763E8_19C9_4079_8D48_639556476980__INCLUDED_)
#define AFX_OSDLG_H__58E763E8_19C9_4079_8D48_639556476980__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

/////////////////////////////////////////////////////////////////////////////
// COSDlg dialog

class COSDlg : public CDialog
{
	CString t_JCname;
	CString t_star;
	CString t_end;
	int n_cL[20];	//运行顺序
	int n_name[20]; //进程名
	int n_star[20];  //到达时间
	int n_time[20]; //服务时间
	int n_f[20];	//完成时间
	int n_fn[20];	//是不在运行或者完成0时未运行,1时正在运行,2时已经完成
	double n_s[20];	//周转时间
	double n_qs[20];	//带权周转时间
    double n_sj[20];	//优先权

	CString s_cL[20];
	CString s_name[20]; //进程名
	CString s_star[20];  //到达时间
	CString s_time[20]; //服务时间
	CString s_f[20];	//完成时间
	CString s_s[20];	//周转时间
	CString s_qs[20];	//带权周转时间
    CString s_sj[20];	//优先权
	CString s_runTime;
	CString	str[20];	//所有信息(调度时间+完成时间+调度次序+周转时间+带权周转时间)
	CString	str2[20];	//所有信息(调度时间+完成时间+调度次序+周转时间+带权周转时间)
	CString	str3[20];	//所有信息(调度时间+完成时间+调度次序+周转时间+带权周转时间)
	int count;			//任务数目
	int running;		//是否在运行	1时在,0反之
	int Alltime;		//所有进程运行总时间
	int runtime;		//目前运行时间

// Construction
public:
	COSDlg(CWnd* pParent = NULL);	// standard constructor

	void GetList(int n_star[20],int n_time[20],
		int n_f[20],double n_s[20],double n_qs[20],
		CString *str,int n)
	{
		int i=0,j=1,k=0,n_temptime=0,temp_running=0,n_tempruntime=0;
		double ave1=0,ave2=0;//平均周转与平均带权周转
		CString s_ave1,s_ave2;
			//n_temptime当前时间 n_tempruntime服务时间
	/*	for(i=1;i<=20;i++)
		{
		n_name[i]=0; 
		n_star[i]=0;  
		n_time[i]=0; 
		n_f[i]=0;	
		n_fn[i]=0;
		n_s[i]=0;	
		n_qs[i]=0;	
	    n_sj[i]=0;
		}
	*/	
		while(n_temptime<=Alltime+1)
		{
			
			if(temp_running==0 && j<=count)				//目前没有进程在运行
			{	
				for(i=1;i<=count;i++)
				{	
					if(n_fn[i]==0)
					{
					k=i;
					break;
					}
				}

				for(i=2;i<=count;i++)
				{
					if(n==1)
					{
						if(n_star[k]==n_star[i])
						{
							if(n_time[i]<n_time[k] && n_fn[i]==0 && n_temptime >= n_star[i])
							{						
								k=i;
							}
						}
						else
					if(double((n_temptime-n_star[k]))/double(n_time[k]) 
						< 
						double((n_temptime-n_star[i]))/double(n_time[i])
						&& n_fn[i]==0 && n_temptime >= n_star[i] )	//优先级最大且未运行过
						k=i;										//并到达运行时间
					}

					if(n==2)
					{
						if(n_star[i]<n_star[k] && n_fn[i]==0 && n_temptime >= n_star[i])
							{						
								k=i;					//先来先服务
							}
					}

					if(n==3)
					{
						if(n_time[i]<n_time[k] && n_fn[i]==0 && n_temptime >= n_star[i])
							{						
								k=i;					//短作业优先
							}
					}
				}


				if(n_temptime >= n_star[k])
				{
					temp_running=1;								//表明进程在运行	
					n_cL[k]=j;									//安排顺序
					
					s_star[k].Format("%d:%d",n_temptime/60,n_temptime%60);	//得到调度时间
					s_f[k].Format("%d:%d",(n_temptime+n_time[k])/60,(n_temptime+n_time[k])%60);	//得到完成时间
					s_cL[k].Format("%d",n_cL[k]);				//得到高度次序
					s_s[k].Format("%d",n_temptime-n_star[k]+n_time[k]);	//得到周转时间
					ave1+=double(n_temptime-n_star[k]+n_time[k])/count;
					s_ave1.Format("%lf",ave1);

					s_qs[k].Format("%lf",double(n_temptime-n_star[k]+n_time[k])/double(n_time[k]));
					ave2+=(double(n_temptime-n_star[k]+n_time[k])/double(n_time[k]))/count;
																//得到带权周转时间用平均带权周转时间	
					s_ave2.Format("%lf",ave2);
					n_fn[k]=1;									//说明状态
					n_tempruntime=n_time[k];					//得到服务时间
				}
			}
			else
			{
			//	for(i=1;i<=count;i++)
			//	{
			//		if(n_fn[i]==1 )
			//		{
						n_tempruntime--;
						n_temptime++;
						if(n_tempruntime==0)
						{
							temp_running=0;
							n_fn[k]=2;							//进程已经完成
							j++;
							n_temptime--;
						}	//进程完成
			//		}		//进程正在运行
			//	}			//循环

			}				//else
		if(temp_running==0)n_temptime++;
		}					//whiles
		
		for(i=1;i<=count;i++)
		{
			str[i]="   "+s_star[i]+"      "+s_f[i]+"       "+s_cL[i]+"       "+s_s[i]+"      "+s_qs[i];	
		}
		str[count+1]=" 平均周转时间:"+s_ave1+"   平均带权周转时间:"+s_ave2;
	 
	}
// Dialog Data
	//{{AFX_DATA(COSDlg)
	enum { IDD = IDD_OS_DIALOG };
	CListBox	m_JCshow3;
	CListBox	m_JCshow2;
//	CStatic	m_RunT;
	CListBox	m_JCshow;
	CListBox	m_JClist;
	int		m_time;
	int		m_star;
	int		m_star2;
	//}}AFX_DATA
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(COSDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	HICON m_hIcon;

	// Generated message map functions
	//{{AFX_MSG(COSDlg)
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	afx_msg void OnJClist();
	afx_msg void Onadd();
	afx_msg void OnTstar();
	afx_msg void OnTend();
	afx_msg void Onrun();
	afx_msg void Onjcshow();
	virtual void OnOK();
	afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
	afx_msg void OnTimer(UINT nIDEvent);
	afx_msg void OnrunTime();
	virtual void OnCancel();
	afx_msg void Onexit();
	afx_msg void Onjcshow2();
	afx_msg void Onjcshow3();
	afx_msg void OnTstar2();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_OSDLG_H__58E763E8_19C9_4079_8D48_639556476980__INCLUDED_)

⌨️ 快捷键说明

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