【WIN32开发】WM_PAINT画图,程序CPU占有率太高了,优化问题

大树学长 2019-04-17 03:40:00
WIN32里面在WM_PAINT中绘图的问题
现在CPU和电量消耗都回很高
主要是画四百多个点的首尾相连的线段。

我发现问题的原因:
1、WM_PAINT刷新次数太快,一秒钟差不多调用20多次,这个可能会导致CPU很高,已经使用BeginPaint和EndPaint
2、我画图的问题,因为画图量太大了,主要是一次性要画400多条线段,导致CPU很高,只有将一次刷新内线段条数减少到50条以内才会有明显的CPU使用明显降低的现象。画图用的GDI+还加了抗锯齿。

LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_PAINT://1秒钟会调用20多次
{
if (hwnd == MainFrameHwnd)
{
hdc = BeginPaint(hwnd, &ps);
Radar_WinMainGUI();//画图
EndPaint(hwnd, &ps);
}
return 0;
}
}
}


我想到的解决办法:
1、减少WM_PAINT每秒内刷新的次数


想问下这种问题要怎么解决
...全文
520 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
秘境之眼 2019-05-06
  • 打赏
  • 举报
回复
现在内存dc画好,在显示
大树学长 2019-04-22
  • 打赏
  • 举报
回复
引用 5 楼 许文君 的回复:
invalidaterect频繁触发才会的吧,建议一个降低fps,第二个优化invalidaterect区域

解决了
大树学长 2019-04-22
  • 打赏
  • 举报
回复
引用 4 楼 牧童吃五谷 的回复:
一次性要画400条线段,每秒要调用刷新20次,这样每秒就8000条线段,那可能确实很高。
不知道为什么要每秒钟刷新20次,人的眼睛对于每秒10次的刷新基本就看不清楚了,建议考虑在每秒钟5次刷新就挺高了

学习了
许文君 2019-04-20
  • 打赏
  • 举报
回复
invalidaterect频繁触发才会的吧,建议一个降低fps,第二个优化invalidaterect区域
牧童吃五谷 2019-04-20
  • 打赏
  • 举报
回复
一次性要画400条线段,每秒要调用刷新20次,这样每秒就8000条线段,那可能确实很高。 不知道为什么要每秒钟刷新20次,人的眼睛对于每秒10次的刷新基本就看不清楚了,建议考虑在每秒钟5次刷新就挺高了
大树学长 2019-04-17
  • 打赏
  • 举报
回复
是别人以前代码的问题,现在快要解决了
zgl7903 2019-04-17
  • 打赏
  • 举报
回复
GDI+ 的效率比GDI的还低 建议 要么用GDI(减少抗锯齿需求),要么用 DirectX 等硬件加速特性
大树学长 2019-04-17
  • 打赏
  • 举报
回复
因为以前用MFC画图没有问题,好像是在窗口改变后才会刷新,

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧