vc 重绘占用CPU过高有关问题
vc 重绘占用CPU过高问题
在单文档视图中绘制运动轨迹,每秒钟增加一个点,视图不停的重绘,程序大概在运行一个半小时的时候,CPU使用率会达到%50.请问高手这个问题怎么解决?
------解决方案--------------------
建立内存dc,每次都画在内存dc上
然后ondraw里拷贝过去
------解决方案--------------------
问题出现在在你每秒都重绘上,如果点子过多,你再使用setpixel这类函数,cpu占用肯定就高了。
1. 每次只绘改变的点。
2. 更改绘图方式。
------解决方案--------------------
可能是每次重绘都是从第一个点画起的吧,那样的话,花时间太多了,可以只画后面新生成的点
------解决方案--------------------
上代码....
------解决方案--------------------
cainiao luguo
------解决方案--------------------
记得侯捷的<深入浅出MFC>里面有个重绘的 Hint,就是只画你一部分,
建议你看一下,应该有帮助,
------解决方案--------------------
在单文档视图中绘制运动轨迹,每秒钟增加一个点,视图不停的重绘,程序大概在运行一个半小时的时候,CPU使用率会达到%50.请问高手这个问题怎么解决?
------解决方案--------------------
建立内存dc,每次都画在内存dc上
然后ondraw里拷贝过去
------解决方案--------------------
问题出现在在你每秒都重绘上,如果点子过多,你再使用setpixel这类函数,cpu占用肯定就高了。
1. 每次只绘改变的点。
2. 更改绘图方式。
------解决方案--------------------
可能是每次重绘都是从第一个点画起的吧,那样的话,花时间太多了,可以只画后面新生成的点
------解决方案--------------------
上代码....
------解决方案--------------------
cainiao luguo
------解决方案--------------------
记得侯捷的<深入浅出MFC>里面有个重绘的 Hint,就是只画你一部分,
建议你看一下,应该有帮助,
------解决方案--------------------
- C/C++ code
#include "ENtime.h" //每一帖起始时间 void ENtime::countGetTickCount() { IniFrameDelay=GetTickCount();//获得豪秒 // cout<<"IniFrameDelay:"<<IniFrameDelay<<endl; } //计算每一帖帖速 void ENtime::countFrameSpeed() { FrameDelay=GetTickCount() - IniFrameDelay;//每一帖的帖速 // cout<<"FrameDelay:"<<FrameDelay<<" SetSpeedValue:"<<SetSpeedValue<<endl; } //控制相对帖速 int ENtime::setFrameSpeed(float speed) { SetSpeedValue=speed;//设置帖速 return 1; } //获取相对帖速值 int ENtime::getFrameSpeed() { return SetSpeedValue; } //设置sleep bool ENtime::FrameSleep() { FrameDelay=GetTickCount() - IniFrameDelay;//每一帖的帖速 if(FrameDelay < SetSpeedValue) { ::Sleep(SetSpeedValue - FrameDelay);//主动放弃CPU使用时间 // ::Sleep(SetSpeedValue);//主动放弃CPU使用时间 return 0;//帖速不合符要求 } return 1;//帖速合符要求 }