SendMessage和PostMessage造成刷新界面闪动不同

zsb534923374 2015-06-10 11:34:14
在线程中,分别用这两个函数发同一消息,
消息处理函数是对主界面的一个LISTCTRL控件插入值
但是发现使用PostMessage时,会造成绘图闪动很严重
而使用SendMessage时,主界面绘图不会闪动

本身绘图部分使用了双缓冲。

在消息处理函数中,如果删掉DeleteAllItem函数时,PostMessage后,界面也不会闪动
但是需要每一次插入值时将LIST先清空

使用SendMessage时虽然不会闪动,但是会造成阻塞。
请问这种情况怎么处理
...全文
480 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tinary3v0 2015-06-12
  • 打赏
  • 举报
回复
引用 4 楼 happyparrot 的回复:
尽量不要用DeleteAllItems,这样需要清空一遍再插入,一慢二闪。 如果数据量变化不大,只是内容变化,可以直接用SetItemText进行行信息更新。对比刷新前后的行变化,如果新的行数更多,那么多出的这部分,用InsertItem增加;如果新的行数少,那么原先多出的这些行,用DeleteItem删除。避免先清空后再重新插入的情况。
给你的空间增加双缓存绘图属性 类似 TVS_EX_DOUBLEBUFFER(根据你的控件查找对应属性) 然后按照上面这个说的做,应该就已经做到了速度最快了;界面一般不会闪。 可以考虑定时刷新,避免消息过于频繁造成刷新不过来;原则上,数据保持高速统一,但界面定时刷新即可。
zsb534923374 2015-06-11
  • 打赏
  • 举报
回复
引用 4 楼 happyparrot 的回复:
尽量不要用DeleteAllItems,这样需要清空一遍再插入,一慢二闪。 如果数据量变化不大,只是内容变化,可以直接用SetItemText进行行信息更新。对比刷新前后的行变化,如果新的行数更多,那么多出的这部分,用InsertItem增加;如果新的行数少,那么原先多出的这些行,用DeleteItem删除。避免先清空后再重新插入的情况。
数据量是很多,我在发完消息后,SLEEP(10),发现闪烁明显减少
zsb534923374 2015-06-11
  • 打赏
  • 举报
回复
引用 2 楼 VisualEleven 的回复:
// Updating a control or window with large amounts of data may cause 
// flicker. In such cases it may be better to turn off drawing

//m_list is a member of type CListCtrl
m_List.SetRedraw(FALSE);  // turn drawing off regardless of list mode

//
// Update control
//

m_List.SetRedraw(TRUE);  // turn drawing back on and update the window

// invalidate the entire control, force painting
m_List.Invalidate();
m_List.UpdateWindow();
这个代码的功能是什么呢,看不太明白啊
zsb534923374 2015-06-11
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry 的回复:
PostMessage发送是不是过于频繁,造成界面刷新过快,你可以做一些过滤
是发送比较频繁,过滤的话该如何做呢
赵4老师 2015-06-11
  • 打赏
  • 举报
回复
Multiple Threads in the User Interface http://msdn.microsoft.com/zh-cn/library/ms810439.aspx
快乐鹦鹉 2015-06-10
  • 打赏
  • 举报
回复
尽量不要用DeleteAllItems,这样需要清空一遍再插入,一慢二闪。 如果数据量变化不大,只是内容变化,可以直接用SetItemText进行行信息更新。对比刷新前后的行变化,如果新的行数更多,那么多出的这部分,用InsertItem增加;如果新的行数少,那么原先多出的这些行,用DeleteItem删除。避免先清空后再重新插入的情况。
笨笨仔 2015-06-10
  • 打赏
  • 举报
回复
首先,你程序结构设计就不合理 其次,Send和Post的区别就在于前者是等待发送完成后再返回,后者是立即返回。 对于消息处理中出现的界面闪动,可通过设计进行改善。
Eleven 2015-06-10
  • 打赏
  • 举报
回复
// Updating a control or window with large amounts of data may cause 
// flicker. In such cases it may be better to turn off drawing

//m_list is a member of type CListCtrl
m_List.SetRedraw(FALSE);  // turn drawing off regardless of list mode

//
// Update control
//

m_List.SetRedraw(TRUE);  // turn drawing back on and update the window

// invalidate the entire control, force painting
m_List.Invalidate();
m_List.UpdateWindow();
oyljerry 2015-06-10
  • 打赏
  • 举报
回复
PostMessage发送是不是过于频繁,造成界面刷新过快,你可以做一些过滤
内容概要:本文围绕含软开断装置(SOP)的配电网在发生多线路故障情况下的故障重构问题展开研究,提出了一种基于Matlab代码实现的优化重构方法。通过引入SOP这一先进的电力电子设备,充分发挥其对有功和无功功率的灵活独立调节能力,实现对配电网潮流的精确控制。在多点故障发生后,该方法能够快速隔离故障区域,并通过重构网络拓扑,最大限度地恢复健全区域的供电,有效减少停电损失,从而显著提升供电可靠性和系统应对突发事件的韧性。研究建立了以最小化负荷削减量和开关操作次数为目标的混合整数非线性规划模型,并综合考虑了潮流平衡、节点电压、线路容量及辐射状运行等关键约束条件,采用先进的智能优化算法进行求解,并通过标准算例系统进行了Matlab仿真验证,证明了所提方法在恢复能力和运行经济性方面的优越性。; 适合人群:电气工程、电力系统自动化等相关专业的高校师生、科研人员以及从事电网规划、运行与调度的工程技术人员。; 使用场景及目标:①用于研究高比例分布式电源接入背景下,配电网在极端故障事件后的快速恢复与韧性提升策略;②为SOP等新型柔性互联装置的规划配置、运行控制及效益评估提供理论依据和技术支持;③作为电力系统优化、故障恢复算法、智能优化算法教学与科研的综合性案例参考。; 阅读建议:读者应具备一定的电力系统分析、优化建模和Matlab编程基础,建议结合提供的Matlab代码进行实践操作,深入理解故障重构模型的构建逻辑、求解流程及SOP的作用机理,并可根据不同的电网参数或故障场景对模型进行修改和扩展,以适应多样化的研究与应用需求。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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