程序占用很高的CPU,怎么办?
void COscTreDlg::DrawWave(CDC * pDC)
{
CRect rect;
CString str;
double xx=0,yy=0,xxx=0;
int m_right,m_left,m_top,m_bottom;
int i;
int m_Interval=(m_high-m_low)/10;
if(m_Interval<1) m_Interval=1;
CWnd *pWnd=GetDlgItem(IDC_HUABAN); //绘图框指针
pWnd->GetClientRect(&rect);
pDC->Rectangle(&rect);
m_left=rect.left+10;
m_top=rect.top+10;
m_right=rect.right-10;
m_bottom=rect.bottom-20;
int m_IntervalPan = (m_right - m_left)/11;
if (m_IntervalPan < 1 ) m_IntervalPan =1;
// 创建画笔对象
CPen* pPenRed = new CPen;
// 红色画笔
pPenRed->CreatePen(PS_SOLID,1,RGB(255,0,0));
// 创建画笔对象
CPen *pPenBlack= new CPen;
//黑色画笔
pPenBlack->CreatePen(PS_SOLID,1,RGB(0,0,0));
// 创建画笔对象
CPen* pPenBlue = new CPen;
// 蓝色画笔
pPenBlue->CreatePen(PS_SOLID,1,RGB(0,0, 255));
// 创建画笔对象
CPen* pPenGreen = new CPen;
// 绿色画笔
pPenGreen->CreatePen(PS_DOT,1,RGB(0,255,0));
CGdiObject* pOldPen = pDC->SelectObject(pPenRed);
// 绘制坐标轴
pDC->MoveTo(m_left,m_top);
// 垂直轴
pDC->LineTo(m_left,m_bottom);
// 水平轴
pDC->LineTo(m_right,m_bottom);
// 写X轴刻度值
for(i=0;i<10;i++)
{
//str.Format(_T("%d"),m_Min+i*m_Interval);
str.Format(_T("%d"),m_low+i*m_Interval);
pDC->TextOut(m_left+i*m_IntervalPan,m_bottom+3,str);
}
//str.Format(_T("%d"),m_Max);
str.Format(_T("%d"),m_high);
pDC->TextOut(m_left+10*m_IntervalPan,m_bottom+3,str);
// 绘制X轴刻度
for (i = m_left; i < m_right-20; i += 5)
{
if ((i & 1) == 0)
{
// 10的倍数
pDC->MoveTo(i + 10, m_bottom);
pDC->LineTo(i + 10, m_bottom+4);
}
else
{
// 10的倍数
pDC->MoveTo(i + 10, m_bottom);
pDC->LineTo(i + 10, m_bottom+2);
}
}
// 绘制Y轴箭头
pDC->MoveTo(m_right-5,m_bottom-5);
pDC->LineTo(m_right,m_bottom);
pDC->LineTo(m_right-5,m_bottom+5);
// 绘制X轴箭头
pDC->MoveTo(m_left-5,m_top+5);
pDC->LineTo(m_left,m_top);
pDC->LineTo(m_left+5,m_top+5);
pDC->SelectObject(pPenGreen);
// 绘制Y轴网格 选择绿色画笔
int iTemp = (m_bottom - m_top)/5;
int iTemp1= (m_right - m_left)/10;
for (i = 1 ;i <= 5 ;i++)
{
pDC->MoveTo(m_left,m_bottom - i*iTemp);
pDC->LineTo(m_right,m_bottom - i*iTemp);
}
//波形图绘制
pDC->SelectObject(pPenBlue);
int DirectY=m_bottom-iTemp; //准线
CPoint point(m_left,DirectY);
pDC->MoveTo(m_left,DirectY);
pDC->LineTo(m_right,DirectY);
//正弦波
pDC->SelectObject(pPenBlack);
//if(MoveX>3.14) MoveX=0;
CPoint point1(m_left-MoveX,DirectY);
m_pStartPoint=point1;
m_pEndPoint=point1;
while(xx-MoveX<(double)m_right)
{
if(xx-MoveX>0) //判断是否超出picture control
{
yy=sin(xx*6.28/102);
m_pEndPoint.x=xx+point1.x;
m_pEndPoint.y=iTemp*yy+point1.y;
if(m_pStartPoint.x>m_left&&m_pEndPoint.x<m_right) //判断是否超出坐标范围
{
//画波形
pDC->MoveTo(m_pStartPoint);
pDC->LineTo(m_pEndPoint);
}
m_pStartPoint=m_pEndPoint;
}
//画可移动的X轴分隔线 选择绿色画笔
pDC->SelectObject(pPenGreen);
for (i = 1 ;i <= 10 ;i++)
{
if((m_right - i*iTemp1)-MoveX>m_left && (m_right - i*iTemp1)+MoveX<m_right)
{
pDC->MoveTo((m_right - i*iTemp)-MoveX,m_top);
pDC->LineTo((m_right - i*iTemp)-MoveX,m_bottom );
}
}
xx=xx+0.1;
pDC->SelectObject(pPenBlack);
}
MoveX=MoveX+0.1;
pDC->SelectObject(pOldPen);
delete pPenRed;
delete pPenBlue;
delete pPenGreen;
delete pPenBlack;
return;
}
我要做一个波形移动的程序,这个是画图的代码,一运行就使用CPU快100%。高手帮我看看呀!!