📄 transferview.cpp
字号:
// transferView.cpp : implementation of the CTransferView class
//
#include "stdafx.h"
#include "transfer.h"
#include "transferDoc.h"
#include "transferView.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTransferView
IMPLEMENT_DYNCREATE(CTransferView, CView)
BEGIN_MESSAGE_MAP(CTransferView, CView)
//{{AFX_MSG_MAP(CTransferView)
ON_COMMAND(abc, Onabc)
ON_WM_TIMER()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTransferView construction/destruction
CTransferView::CTransferView()
{
// TODO: add construction code here
}
CTransferView::~CTransferView()
{
}
BOOL CTransferView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CTransferView drawing
void CTransferView::OnDraw(CDC* pDC)
{
CTransferDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CRect rc;
GetClientRect(&rc);
pDC->MoveTo(0,rc.bottom-120);
pDC->LineTo(430,rc.bottom-120);
CPen penyellow;
penyellow.CreatePen(PS_SOLID,4,RGB(128,128,0)); //166,202,240
CPen*ppen;
ppen=pDC->SelectObject(&penyellow);
pDC->MoveTo(40,38);
pDC->LineTo(650,38);
pDC->TextOut(660,28,"磁道");
pDC->TextOut(80,10," 下 方 演 示 的 是 磁 臂 调 度 的 SSTF");
pDC->TextOut(10,50,"随");
pDC->TextOut(10,80,"机");
pDC->TextOut(10,110,"生");
pDC->TextOut(10,140,"成");
pDC->TextOut(10,170,"的");
pDC->TextOut(10,200,"访");
pDC->TextOut(10,230,"盘");
pDC->TextOut(10,260,"请");
pDC->TextOut(10,290,"求");
pDC->TextOut(30,28,"0");
pDC->TextOut(110,28,"30");
pDC->TextOut(210,28,"60");
pDC->TextOut(290,28,"90");
pDC->TextOut(380,28,"120");
pDC->TextOut(470,28,"150");
pDC->TextOut(560,28,"180");
pDC->TextOut(40,rc.bottom-100,"右 侧 模 拟 的 是 扇 区 排 队 的 FCFS");
pDC->TextOut(40,rc.bottom-40,"采 用 FCFS 的 总 延 迟 时 间");
pDC->MoveTo(650,38);
pDC->LineTo(600,28);
pDC->MoveTo(650,38);
pDC->LineTo(600,48);
pDC->MoveTo(40,38);
pDC->LineTo(40,(rc.bottom-120));
pDC->MoveTo(40,rc.bottom-120);
pDC->LineTo(30,(rc.bottom-170));
pDC->MoveTo(40,rc.bottom-120);
pDC->LineTo(50,(rc.bottom-170));
pDC->SelectObject(ppen);
for(int q=0;q<300;q++)
{ if((records[q]!=0)&&(records[q+1]!=0))
{
CPen penblue;
penblue.CreatePen(PS_SOLID,4,RGB(0,0,255)); //166,202,240
CPen*ppenOl;
ppenOl=pDC->SelectObject(&penblue);
pDC->MoveTo(records[q],records_v[q]);
pDC->LineTo(records[q+1],records_v[q+1]);
pDC->SelectObject(ppenOl);
}
}
//画条
if(ax!=0)
{
CBrush b(BS_HATCHED,RGB(0,0,255));
CBrush *pbrOl;
pbrOl=pDC->SelectObject(&b);
pDC->Rectangle(659,50,669,((ax/4)+50));
pDC->TextOut(670,90,"磁");
pDC->TextOut(670,130,"头");
pDC->TextOut(670,170,"移");
pDC->TextOut(670,210,"动");
pDC->TextOut(670,250,"总");
pDC->TextOut(670,290,"距");
pDC->TextOut(660,53,"0");
pDC->TextOut(649,400,"480");
//pDC->TextOut(631,400,"距");
//假设寻道速度为 300道/秒, 为了获得较好的演示效果,实际演示时间与此时间不符。
pDC->Rectangle(689,50,699,((ax/5)+50));
pDC->TextOut(700,90,"寻");
pDC->TextOut(700,130,"道");
pDC->TextOut(700,170,"总");
pDC->TextOut(700,210,"时");
pDC->TextOut(700,250,"间");
pDC->TextOut(700,290,"开");
pDC->TextOut(700,330,"销");
pDC->TextOut(688,53,"0s");
pDC->TextOut(689,400,"2s");
//平均服务时间=总时间开销/请求个数 , 为了获得较好的演示效果,演示时平均服务时间都为1秒
pDC->Rectangle(718,50,728,(cx*7-150));
pDC->TextOut(731,90,"平");
pDC->TextOut(731,130,"均");
pDC->TextOut(731,170,"服");
pDC->TextOut(731,210,"务");
pDC->TextOut(731,250,"时");
pDC->TextOut(731,290,"间");
pDC->TextOut(717,53,"0s");
pDC->TextOut(717,350,"0.05s");
pDC->SelectObject(pbrOl);
//画横条
if(ax!=0)
{
CBrush b;
b.CreateSolidBrush(RGB(0,255,0));
CBrush *pbrOl;
pbrOl=pDC->SelectObject(&b);
pDC->Rectangle(5,rc.bottom-70,n*200/2-50,rc.bottom-55);
pDC->SelectObject(pbrOl);
}
pDC->TextOut(7,rc.bottom-71,"0s");
pDC->TextOut(400,rc.bottom-71,"0.02s");
//画游标
if(first!=0)
{CRect rc;
GetClientRect(&rc);
CPen penred;
penred.CreatePen(PS_SOLID,4,RGB(255,0,0)); //166,202,240
CPen*ppenO;
ppenO=pDC->SelectObject(&penred);
pDC->MoveTo(current,55);
pDC->LineTo((current-10),40);
pDC->MoveTo(current,55);
pDC->LineTo((current+10),40);
pDC->MoveTo(current,(rc.bottom-135));
pDC->LineTo((current-10),(rc.bottom-120));
pDC->MoveTo(current,(rc.bottom-135));
pDC->LineTo((current+10),(rc.bottom-120));
pDC->MoveTo(current,55);
pDC->LineTo(current,(current_v-12));
pDC->MoveTo(current,(current_v+12));
pDC->LineTo(current,(rc.bottom-135));
pDC->SelectObject(ppenO);
}
//画圆
for(int p=0;p<300;p++)
{
CPen pengreen;
pengreen.CreatePen(PS_SOLID,1,RGB(0,255,0));
CPen*ppenOld;
ppenOld=pDC->SelectObject(&pengreen);
CBrush br;
br.CreateSolidBrush(RGB(0,255,0));
CBrush *pbrOld;
pbrOld= pDC->SelectObject(&br);
pDC->Ellipse((task_mirror[p]-6),(vertical_mirror[p]-6),(task_mirror[p]+6),(vertical_mirror[p]+6));
pDC->SelectObject(pbrOld);
pDC->SelectObject(ppenOld);
}
//画扇区
CBrush brushBlu;
CBrush* pOldBrus;
brushBlu.CreateSolidBrush(RGB(255, 240, 220));
pOldBrus= pDC->SelectObject(&brushBlu);
pDC->Ellipse(440,220,640,420);
pDC->TextOut(636,320,"0");
pDC->TextOut(540,413,"3");
pDC->TextOut(440,320,"6");
pDC->TextOut(540,220,"9");
pDC->TextOut(636,320,"1");
pDC->SelectObject(pOldBrus);
if(second==1)
{
CBrush brushB;
CBrush* pOldB;
brushB.CreateSolidBrush(RGB(255, 255, 0));
pOldB = pDC->SelectObject(&brushB);
for(int bb=0;bb<300;bb++)
{if(arr[kksave][bb]!=0)
{
pDC->Pie(440,220,640,420,(540+100*cos(arr[kksave][bb]-6)),(320+100*sin(arr[kksave][bb]-6)),(540+100*cos(arr[kksave][bb]+6)),(320+100*sin(arr[kksave][bb]+6)));
}
}
pDC->SelectObject(pOldB);
CBrush brushBlue;
CBrush* pOldBrush;
brushBlue.CreateSolidBrush(RGB(222, 202, 240));
pOldBrush = pDC->SelectObject(&brushBlue);
for(int ss=0;ss<served;ss++)
{
pDC->Pie(440,220,640,420,(540+100*cos(arr[kksave][ss]-6)),(320+100*sin(arr[kksave][ss]-6)),(540+100*cos(arr[kksave][ss]+6)),(320+100*sin(arr[kksave][ss]+6)));
}
pDC->SelectObject(pOldBrush);
pDC->MoveTo(540,320);
pDC->LineTo(540+25*cos(current_angle+90),320+25*sin(current_angle+90));
pDC->MoveTo(540,320);
pDC->LineTo(540+25*cos(current_angle-90),320+25*sin(current_angle-90));
pDC->MoveTo(540+25*cos(current_angle+90),320+25*sin(current_angle+90));
pDC->LineTo(540+100*cos(current_angle),320+100*sin(current_angle));
pDC->MoveTo(540+25*cos(current_angle-90),320+25*sin(current_angle-90));
pDC->LineTo(540+100*cos(current_angle),320+100*sin(current_angle));
CPen pengreen;
pengreen.CreatePen(PS_SOLID,1,RGB(0,255,0));
CPen*ppenOld;
ppenOld=pDC->SelectObject(&pengreen);
CBrush br ;
br.CreateSolidBrush(RGB(0,255,0) ); ;
CBrush *pbrOld;
pbrOld= pDC->SelectObject(&br);
pDC->SelectObject(pbrOld);
pDC->SelectObject(ppenOld);
}
}
/////////////////////////////////////////////////////////////////////////////
// CTransferView printing
BOOL CTransferView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CTransferView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CTransferView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CTransferView diagnostics
#ifdef _DEBUG
void CTransferView::AssertValid() const
{
CView::AssertValid();
}
void CTransferView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CTransferDoc* CTransferView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTransferDoc)));
return (CTransferDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CTransferView message handlers
void CTransferView::Onabc()
{
// TODO: Add your command handler code here
for(int a=0;a<300;a++)
{task[a]=0;
vertical[a]=0;
task_mirror[a]=0;
vertical_mirror[a]=0;
records[a]=0;
records_v[a]=0;
}
cursor=0;
pointer=0;
sth=0;
delay=0;
length=0;
second=1;
once=0;
h=0;
request_num=0;
flag=0;
randnumber2=0;
kksave=0;
ax=0;
transferstop=0;
kko=0;
num=1;
ba=0;
l=0;
temp=0;
position=80;
temp2=500;
vertical_current=50;
current_v=0;
last=80;
last_v=50;
first=0;
for(int aj=0;aj<300;aj++)
{
for(int ppp=0;ppp<300;ppp++)
{
arr[aj][ppp]=0;
arr2[aj][ppp]=0;
}
}
SetTimer(1,500,NULL);
}
void CTransferView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if(length==0)
{
randnumber=(rand()%4);
CRect rc;
GetClientRect(&rc);
if(vertical_current<(rc.bottom-150))
{
for(int b=0;b<randnumber;b++)
{ task[cursor+b]=(rand()%570+50);
vertical[cursor+b]=vertical_current;
//生成扇区请求
randnumber2=rand()%6;
for (int delphi=0;delphi<randnumber2;delphi++)
{arr[cursor+b][delphi]=rand()%360;
arr2[cursor+b][delphi]=arr[cursor+b][delphi];
}
//OnDraw 出来的是原数组的副本
task_mirror[cursor+b]=task[cursor+b];
vertical_mirror[cursor+b]=vertical_current;
cursor=(randnumber+cursor);
vertical_current=vertical_current+10;
}
}
for(int c=0;c<300;c++)
{if((task[c]!=0)&&(task[c]!=500))
{temp=abs((position-task[c]));
if(temp2>temp)
{temp2=temp;
current=task[c];
current_v=vertical[c];
}
}
}
ax=(ax+abs(position-current));
position=current;
for(int kk=0;kk<300;kk++)
{ if(task[kk]==current)
{ task[kk]=500;
kksave=kk;
num++;
ba++;
}
}
cx=(ax/num);
if(current!=temptemp)
{
records[l]=current;
records_v[l]=current_v;
l++;
temptemp=current;
}
temp2=600;
first=first+1;
h=0;
}
for(int jboss=0;jboss<300;jboss++)
{ if((task[jboss]!=500) ||( task[jboss]!=0))
{sth=1;
}
}
if((arr[kksave][0]!=0)&&(sth=1))
{
if(once==0)
{ for(int pppoe=0;pppoe<300;pppoe++)
{ if(arr[kksave][pppoe]!=0)
{length++;
once=1;
}
}
n=length;
}
length--;
if(arr2[kksave][pointer]!=333)
{current_angle=arr[kksave][pointer];
served=n-length;
arr2[kksave][pointer]=333;
}
pointer++;
if(length==0)
{once=0;
pointer=0;
}
sth=0;
}
Invalidate();
CView::OnTimer(nIDEvent);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -