进度反馈慎用SendMessage

2024-04-08 10:08

本文主要是介绍进度反馈慎用SendMessage,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

由于工作需要,编写了一个解析300M字符串的MFC小程序。为了显示出当前的解析进度,使用了MFC的消息:

void WorkThreadFunction()

{

    UIWnd->PostMessage(WM_PROGRESS, BEGIN, NULL);

    while(notEnd())

    {

        ......

        UIWnd->PostMessage(WM_PROGRESS, DATA, ProcessedLength);

    }

    UIWnd->PostMessage(WM_PROGRESS, END, NULL);

}

在实际运行中,发现END消息基本上都会在最后一个DATA消息之前到达。为修正该错误,将PostMessage改为SendMessage。结果发现,虽然消息的时序性得到了保证,却消耗了处理本身9倍的时间(100M的文本处理时间由2秒上升到20秒)。

解决的办法有两种:

1。减少发送DATA的次数。如果进度是用百分比或千分比表示的,则仅在百分比或千分比发生变动时才发送。

2。使用共享数据:工作线程中将进度数据保存,UI线程中使用定时器主动取得共享数据,然后显示出来:

enum enumState

{

    BEGIN,

    DATA,

    END,

};

struct structProgressInfo

{

    enumState State;

    DWORD ProcessedLength;

}g_ProgressInfo;

void WorkThreadFunction()

{

    g_ProgressInfo.State = BEGIN;

    while(notEnd())

    {

        ......

        g_ProgressInfo.State = DATA;

        g_ProgressInfo.ProcessedLength = ProcessedLength;

    }

    g_ProgressInfo.State = END;

}

CMyDialog::OnTimer()

{

    switch(g_ProgressInfo.State)

    {

    ....

    }

}

这篇关于进度反馈慎用SendMessage的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/885284

相关文章

uniapp设置微信小程序的交互反馈

链接:uni.showToast(OBJECT) | uni-app官网 (dcloud.net.cn) 设置操作成功的弹窗: title是我们弹窗提示的文字 showToast是我们在加载的时候进入就会弹出的提示。 2.设置失败的提示窗口和标签 icon:'error'是设置我们失败的logo 设置的文字上限是7个文字,如果需要设置的提示文字过长就需要设置icon并给

PMBOK® 第六版 规划进度管理

目录 读后感—PMBOK第六版 目录 规划进度管理主要关注为整个项目期间的进度管理提供指南和方向。以下是两个案例,展示了进度管理中的复杂性和潜在的冲突: 案例一:近期,一个长期合作的客户因政策要求,急需我们为多家医院升级一个小功能。在这个过程中出现了三个主要问题: 在双方确认接口协议后,客户私自修改接口并未通知我们,直到催进度时才发现这个问题关于UI设计的部分,后台开发人员未将其传递给

Adblock Plus官方规则Easylist China说明与反馈贴(2015.12.15)

-------------------------------特别说明--------------------------------------- 视频广告问题:因Adblock Plus的局限,存在以下现象,优酷、搜狐、17173黑屏并倒数;乐视、爱奇艺播放广告。因为这些视频网站的Flash播放器被植入了检测代码,而Adblock Plus无法修改播放器。 如需同时使用ads

http网络请求与下载进度

Http_request 目录 一、XMLHttpRequest 在使用 Fetch API 进行网络请求时,原生的 Fetch API 并不直接支持获取下载进度的功能,因为 Fetch API 主要是基于 Promise 的,它主要关注于请求的成功或失败,以及响应数据的处理,而不直接处理像进度跟踪这样的底层细节。 不过,你可以通过一些技巧或方法间接实现下载进度的跟踪。以下是一些常用的方法:

PMBOK® 第六版 项目进度管理知识领域

目录 读后感—PMBOK第六版 目录 提到“进度”,大家都能直观理解其含义。有统计指出,现在项目的延迟交付比例越来越高,并且这一趋势持续上升。造成项目延期的原因是多方面的,常见的原因之一是在项目初期,由于时间充裕,往往会做一些与项目无关或超出项目范围的工作,导致项目后期不得不疯狂赶工。 另一种常见问题是过分关注单个活动的精确执行,而忽略了对整个项目进度的宏观把控,这种做法可能会导致团队失

今麦郎「日记薪·1号发」 即时反馈,激活10000+名基层员工

本文内容整理自红海云CEO孙伟对今麦郎集团人力资源总经理王高峰、IT管理中心副总经理邹大勇的访谈。 坚持创新求变的品牌基因 过去30年,中国食品工业蓬勃发展,孕育出一批批在国际舞台上熠熠生辉的民族品牌。今麦郎作为民族品牌代表,自1994年创立以来,始终紧跟消费者需求变迁,从满足基础温饱的初心出发,逐步迈向品牌塑造、健康倡导及高端化探索的新征程,从家喻户晓的“今麦

uniapp交互反馈

页面交互反馈可以通过:uni.showToast(object)实现,常用属性有 ioc值说明 值说明success显示成功图标,此时 title 文本在小程序平台最多显示 7 个汉字长度,App仅支持单行显示。error显示错误图标,此时 title 文本在小程序平台最多显示 7 个汉字长度,App仅支持单行显示。fail显示错误图标,此时 title 文本无长度显示。exception

echarts进度

echarts图表集 let numdata=["I级",'II级','III级','IV级','V级','劣V级']let pricedata=40option = {backgroundColor: '#0f375f',title: {show: false,text: '',left: 'center',top: '30%',textStyle: {color: '#00D5FF

android 自定义进度波形图

在网上找了一些相关资料,有些数据内容没有步骤,显得比较难懂,这边就写一个简单的自定义波形图先上图: 效果如图所示 自定义 view 分几个步骤: 一个类继承自 View 或 ViewGroup;重写构造方法初始化方法:用于初始化画笔、自定义属性等重写 onMeasure()方法:用于测量屏幕尺寸,长宽的模式重写 onLayout()方法:布局查看重写 onDraw()方法:绘制界面写

app版本更新,通知形式显示安装包下载进度

也是公司的项目需要,就稍微研究了下,参考网上一些不错的思路,但其适用版本都比较早,所以通知做了适配了Android 8.0,及权限问题等问题。 原理;下载apk过程中,发起一个通知,并不断发起最新进度的相同ID的通知,覆盖上一个通知,达到显示当前下载进度的效果。 demo已上传:https://download.csdn.net/download/u013370255/10603681 下面