内容发布更新时间 : 2025/6/11 10:20:12星期一 下面是文章的全部内容请认真阅读。
BEGIN_MESSAGE_MAP(CMyDlg, CDialog) //{{AFX_MSG_MAP(CMyDlg) ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1) ON_BN_CLICKED(IDC_RADIO1, OnRadio1) ON_BN_CLICKED(IDC_RADIO2, OnRadio2) ON_BN_CLICKED(IDC_RADIO3, OnRadio3) ON_EN_CHANGE(IDC_EDIT2, OnChangeEdit2) ON_BN_CLICKED(IDC_BUTTON2, OnButton2) ON_BN_CLICKED(IDC_BUTTON3, OnButton3) //}}AFX_MSG_MAP END_MESSAGE_MAP()
///////////////////////////////////////////////////////////////////////////// // CMyDlg message handlers
BOOL CMyDlg::OnInitDialog() {
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE);
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control }
// If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework.
void CMyDlg::OnPaint() {
if (IsIconic()) {
// Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
CPaintDC dc(this); // device context for painting
11
} else { } }
// The system calls this to obtain the cursor to display while the user drags // the minimized window.
HCURSOR CMyDlg::OnQueryDragIcon() {
return (HCURSOR) m_hIcon; }
#include
struct Pro
{
int num,time; }; Pro p[M];
12
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon
dc.DrawIcon(x, y, m_hIcon);
CDialog::OnPaint();
//内存页的结构体
void Input()
{ int s;
//随机数 int i;
srand(time(0));
s = rand()%M;
//cout<<\随机产生指令流------------\\n\ for (i=0; i
//产生指令队列 {
p[i].num=s;
//任选一指令访问点m
//每次运行时进程号不同,用来作为初始化随机数队列的种子
//输入函数,输入实际页号和实际页数
p[i+1].num=p[i].num+1;
//顺序执行一条指令
p[i+2].num=(int)((float)p[i].num*(rand()/(RAND_MAX+1.0))); //执行前地址指令m'
p[i+3].num=p[i+2].num+1;
//顺序执行一条指令
s=(int)((float)(319-p[i+2].num)*(rand()/(RAND_MAX+1.0))) + p[i+2].num; }
for(i=0;i
int Search(int e,Pro*page1,int N)
//查找内存中是否存在要调入的页面 { int t;
Pro*page=new Pro[N]; page=page1;
13
p[i].time=0;
p[5].num=13;p[6].num=32;p[7].num=22; ///测试数
/* p[0].num=10;p[1].num=22;p[2].num=33;p[3].num=44;p[4].num=50;
据1,2,3,4,5,1,3,2 fifo 5,1,2,4 LRU 5,1,3,2 opt置换1,2,3,5
for(int i=0;i
int Max(Pro*page1,int N)
{
Pro*page=new Pro[N]; page=page1;
int e=page[0].time,i=0; while(i
}
for(i=0;i
if(e==page[i].time) return i;
//找最长时间的下标
return -1; }
int Compfu(Pro*page1,int i,int t,Pro p[M])
//找到最久不使用的页面 {
Pro*page=new Pro[N]; page=page1; int count=0; for(int j=i;j
}
return count;
14
t=e/10;
if(t==page[i].num)
return i; return -1;
//找出离现在时间最长的页面
if(e
//找最长时间
if(page[t].num==p[j].num/10) break; else ++count;
//当前页面开始往后查找在内存中的页帧号
}
void CMyDlg::OnButton1() {
// TODO: Add your control notification handler code here UpdateData(true); Input();
//————————地址流———————— CString str1,tmp1; tmp1=str1=\ int k=0,t=0,i=0; for(i=0;i
m_suiji.SetWindowText(_T(str1));
//————————页面流———————— CString str2,tmp2; tmp2=str2=\ for(i=0;i
m_suiji2.SetWindowText(_T(str2));
tmp1.Format(\str1+=tmp1; k++; if(k==0) { }
str1+=\
tmp2.Format(\str2+=tmp2; k++; if(k==0) { }
str2+=\
Pro*page=new Pro[N];
for(int j=0;j
page[j].num=-1;
15