📄 osdlg.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 + -