📄 infdlg.cpp
字号:
// INFDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "MyVM.h"
#include "INFDlg.h"
#include "VM.h"
#include "CPU.h"
#include "PCB.h"
#include "file.h"
#include "Instruction.h"
#include "dictionary.h"
#include "fs.h"
extern VM vm;
// CINFDlg 对话框
IMPLEMENT_DYNAMIC(CINFDlg, CDialog)
CINFDlg::CINFDlg(CWnd* pParent /*=NULL*/)
: CDialog(CINFDlg::IDD, pParent)
, nMem(0)
, nTime(0)
, ID (0)
, nWait(0)
{
}
CINFDlg::CINFDlg(CWnd* pParent,int id)
: CDialog(CINFDlg::IDD, pParent)
, ID(id)
{
}
CINFDlg::~CINFDlg()
{
}
void CINFDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT_MEM, nMem);
DDX_Text(pDX, IDC_EDIT_TIME, nTime);
DDX_Control(pDX, IDC_COMBO_PRI, cb_pri);
DDX_Control(pDX, IDC_EDIT_MAP, et_map);
DDX_Text(pDX, IDC_EDIT_WAIT, nWait);
}
BEGIN_MESSAGE_MAP(CINFDlg, CDialog)
ON_BN_CLICKED(IDOK, OnBnClickedOk)
ON_BN_CLICKED(IDREF, OnBnClickedRef)
END_MESSAGE_MAP()
// CINFDlg 消息处理程序
BOOL CINFDlg::OnInitDialog()
{
CDialog::OnInitDialog();
if(!this->LoadData())
{
MessageBox("该进程已退出!","警告",MB_OK|MB_ICONEXCLAMATION);
return FALSE;
}
this->UpdateData(FALSE);
return TRUE;
}
void CINFDlg::OnBnClickedOk()
{
int pri = 0;
switch(cb_pri.GetCurSel())
{
case 0:
pri = PRI_MAX;break;
case 1:
pri = PRI_MID;break;
case 2:
pri = PRI_MIN;break;
}
//the priority is not modified
if(this->pri == pri)
return OnOK();
//the priority is modified and process has exited
if(vm.pcb[ID] ==NULL)
MessageBox("该进程已退出,您无法修改其状态!","警告",MB_OK|MB_ICONEXCLAMATION);
else
vm.pcb[ID]->PRI = pri;
OnOK();
}
void CINFDlg::OnBnClickedRef()
{
if(this->LoadData())
this->UpdateData(FALSE);
else
MessageBox("该进程已退出!","警告",MB_OK|MB_ICONEXCLAMATION);
}
bool CINFDlg::LoadData()
{
if(vm.pcb[ID] ==NULL)
return false;
PCB&p = *(vm.pcb[ID]);
nMem = p.PDLR+p.PILR;
nTime = p.TOTALTIME;
nWait= p.WAITTIME;
pri = p.PRI;
switch(pri)
{
case PRI_MAX:
cb_pri.SetCurSel(0);break;
case PRI_MID:
cb_pri.SetCurSel(1);break;
case PRI_MIN:
cb_pri.SetCurSel(2);break;
}
CString map;
CString next;
for(int i = p.PAR;i<p.PAR+nMem;i++)
{
next.Format("%d: %d\r\n",i,mem[i]);
if(i<10)
map += "000";
else if(i<100)
map += "00";
else if(i<1000)
map += "0";
map += next;
}
map.TrimRight();
et_map.SetWindowText(map);
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -