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

📄 infdlg.cpp

📁 一个简单的虚拟机和虚拟操作系统
💻 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 + -