📄 processview.cpp
字号:
// ProcessView.cpp : implementation of the CProcessView class
//
#include "stdafx.h"
#include "Process.h"
#include "ProcessDoc.h"
#include "ProcessView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CProcessView
IMPLEMENT_DYNCREATE(CProcessView, CScrollView)
BEGIN_MESSAGE_MAP(CProcessView, CScrollView)
//{{AFX_MSG_MAP(CProcessView)
ON_COMMAND(ID_START, OnStart)
ON_WM_TIMER()
ON_WM_DESTROY()
ON_UPDATE_COMMAND_UI(ID_START, OnUpdateStart)
ON_COMMAND(ID_Continue, OnContinue)
ON_COMMAND(ID_STOP, OnStop)
ON_UPDATE_COMMAND_UI(ID_STOP, OnUpdateStop)
ON_UPDATE_COMMAND_UI(ID_Continue, OnUpdateContinue)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CProcessView construction/destruction
//const int CProcessView::m_pris[N]={12,15,17,8,19};
//const int CProcessView::m_times[N]={3,6,7,3,8};
CProcessView::CProcessView()
{
// TODO: add construction code here
m_proTotal=0;
n=0;
// m_line=0;
m_killTimer=true;
m_start=false;
m_queryFlag=false;
}
CProcessView::~CProcessView()
{
}
BOOL CProcessView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CScrollView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CProcessView drawing
void CProcessView::OnDraw(CDC* pDC)
{
CProcessDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CString str;
str.Format("第%d时刻进程调度情况:",m_proMoni.m_clock);
if(m_start)
{
pDC->TextOut(50,20,str);
m_proMoni.Display(pDC);
m_proMoni.DisplayRecordInfo(pDC);
}
}
void CProcessView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize sizeTotal;
// TODO: calculate the total size of this view
sizeTotal.cx = sizeTotal.cy = 5000;
SetScrollSizes(MM_TEXT, sizeTotal);
}
/////////////////////////////////////////////////////////////////////////////
// CProcessView diagnostics
#ifdef _DEBUG
void CProcessView::AssertValid() const
{
CScrollView::AssertValid();
}
void CProcessView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CProcessDoc* CProcessView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CProcessDoc)));
return (CProcessDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CProcessView message handlers
PCB* CProcessView::CreatePCB()
{
PCB* p=new PCB;
p->pid=n+1;
p->pri=m_pris[n];
p->time=m_times[n];
p->status=0;
n++;//
return p;
}
#include"pritimedlg.h"
void CProcessView::OnStart()
{
// TODO: Add your command handler code here
CPriTimeDlg dlg;
dlg.DoModal();
if(dlg.m_ok)
{
m_proTotal=dlg.m_proNum;
for(int i=0;i<m_proTotal;i++)
{
m_pris[i]=dlg.m_pris[i];
m_times[i]=dlg.m_times[i];
}
if(dlg.m_query)
{
m_queryFlag=true;
m_queryClock=dlg.m_queryTime;
}
m_proMoni.OpenLogFile();
PCB* p=CreatePCB();
m_proMoni.InsertRQ(p);
m_proMoni.WriteLogToFile();
m_proMoni.RecordAllInfo();
m_proMoni.ProSchedule();
//m_proMoni.WriteLogToFile();
m_start=true;
Invalidate();
m_killTimer=false;
SetTimer(1,1000,NULL);
}
}
void CProcessView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
m_proMoni.m_clock++;
// m_proMoni.RecordAllInfo();
// m_proMoni.WriteLogToFile();
m_proMoni.ProRun();
if(n<m_proTotal)
{
PCB *p=CreatePCB();
m_proMoni.InsertRQ(p);
}
m_proMoni.WriteLogToFile();
m_proMoni.RecordAllInfo();
m_proMoni.ProSchedule();
Invalidate();
if(m_proMoni.GetFinishFlag())
{
KillTimer(1);
m_killTimer=true;
AfxMessageBox("演示完毕");
}
if(m_queryFlag)
{
if(m_queryClock==m_proMoni.m_clock)
{
KillTimer(1);
m_killTimer=true;
CString str;
str.Format("视图中显示的即为你所要查询的\n第%d时刻的调度情况",m_queryClock);
AfxMessageBox(str);
return;
}
}
CScrollView::OnTimer(nIDEvent);
}
void CProcessView::OnDestroy()
{
CScrollView::OnDestroy();
// TODO: Add your message handler code here
if(!m_killTimer)
KillTimer(1);
if(m_start)
m_proMoni.CloseLogFile();
}
void CProcessView::OnUpdateStart(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
// pCmdUI->SetCheck(noshow);
pCmdUI->Enable(!m_start);
}
void CProcessView::OnContinue()
{
// TODO: Add your command handler code here
if(m_killTimer)
{
SetTimer(1,1000,NULL);
m_killTimer=false;
}
}
void CProcessView::OnStop()
{
// TODO: Add your command handler code here
KillTimer(1);
m_killTimer=true;
}
void CProcessView::OnUpdateStop(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(m_start && !m_killTimer);
}
void CProcessView::OnUpdateContinue(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(m_start && m_killTimer);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -