关于合并自定义消息的问题,能行吗?

LinuxCard 2015-01-31 01:17:45
需求是这样的,我线程中可能很频繁的接收到数据,然后需要更新界面上的接受时间,我现在是post一条自定义消息到界面,然后界面再来显示的,队列中可能有多个相同的消息,如果消息比较频繁,会造成界面刷新厉害,我知道wm_paint消息,windows是会合并的,那么我的自定义消息,有什么办法合并吗?只处理最新的消息
...全文
142 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
baoyz 2015-02-11
  • 打赏
  • 举报
回复
你是觉得刷新速度过快会出现闪屏吧? 这样,每次接收数据后都把接收时间用同一个变量记录,前面接收的都覆盖了。 在接收线程中做过简单的定时,每次定时到了再把那个时间记录post给界面显示。 如果定时间隔设为100ms,那每秒就会刷新10次,就是接收数据再快也只能刷新10次,既不会觉得太快,也不会觉得丢信号了。(人的感觉要迟钝的多)
信阳毛尖 2015-02-01
  • 打赏
  • 举报
回复
你使用SendMessage就可以避免你这个问题吧?
笨笨仔 2015-02-01
  • 打赏
  • 举报
回复
检查是否需要更新,不需要时直接丢掉消息就行了。
encoderlee 版主 2015-01-31
  • 打赏
  • 举报
回复
楼上的方法也很好,UI线程只定时刷新界面,工作者线程把需要显示的数据、信息保存到一个变量里,一有新数据就更新这个变量,UI线程每隔N(毫)秒,刷新一次,刷新的时候从这个变量里取最新数据并显示
蒋晟 2015-01-31
  • 打赏
  • 举报
回复
根本就不用堵队列嘛 直接设置个全局的事件,在定时器里检查事件是否有信号,有的话更新界面并重置界面状态
encoderlee 版主 2015-01-31
  • 打赏
  • 举报
回复
假如你的自定义消息是WM_USER,则在消息循环处GetMessage取到WM_USER时,先不要忙着DispatchMessage, 先用PeekMessage检查一下消息队列还有没有WM_USER消息,如果消息队列里还有好几个WM_USER消息,则在一个循环中把它们取出并通过PM_REMOVE标志将其从消息队列移除,但保留队尾的最后一个WM_USER,这个即是最新的WM_USER,然后对这个WM_USER调用DispatchMessage处理这个消息。
worldy 2015-01-31
  • 打赏
  • 举报
回复
是否可以post WM_PAINT消息,使用lParam传递参数,你的WM_PAINT消息处理中使用lParam? 没有试过,LZ可以试试看

16,467

社区成员

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

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

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