当前位置: 首页 > news >正文

怎么做网站的自然排名网站seo公司哪家好

怎么做网站的自然排名,网站seo公司哪家好,成都校园兼职网站建设,网上做网页网站任务赚钱Qt/C++中的异步编程 1 介绍2 含义2.1 QtConcurrent2.2 std::future2.3 Qml中的Promise3 使用场景4 代码示例5 注意事项5.1异常处理5.2 线程安全5.3 性能优化5.4 线程间通信5.5 避免死锁1 介绍 异步编程是现代应用程序开发中不可或缺的一部分。它允许程序在执行耗时任务时保持响…

Qt/C++中的异步编程

  • 1 介绍
  • 2 含义
    • 2.1 QtConcurrent
    • 2.2 std::future
    • 2.3 Qml中的Promise
  • 3 使用场景
  • 4 代码示例
  • 5 注意事项
    • 5.1异常处理
    • 5.2 线程安全
    • 5.3 性能优化
    • 5.4 线程间通信
    • 5.5 避免死锁

1 介绍

异步编程是现代应用程序开发中不可或缺的一部分。它允许程序在执行耗时任务时保持响应性,特别是在GUI应用程序中。在Qt/C++中,有多种方式来实现异步编程。本文将重点介绍如何使用Qt中的QtConcurrent库,Qml中ES6标准的Promise还有C++标准库std::future进行异步编程,并讲解他们之间的区别。


2 含义

2.1 QtConcurrent

QtConcurrent 命名空间提供了高级 API,使编写多线程程序成为可能,而无需使用诸如互斥、读写锁、等待条件或 semaphores 等低级线程原语。使用 QtConcurrent 编写的程序会根据可用处理器内核的数量自动调整所使用的线程数。这意味着现在编写的应用程序将来在多核系统上部署时仍可继续扩展。

  • Concurrent Map and Map-Reduce
    QtConcurrent 包含用于并行列表处理的函数式编程 API,包括用于共享内存(非分布式)系统的 MapReduce 和 FilterReduce 实现,以及用于管理 GUI 应用程序中异步计算的类:
    • QtConcurrent::map() 对容器中的每个项目应用一个函数,对项目进行就地修改。
    • QtConcurrent::mapped() 类似 map(),不同之处在于它返回一个带有修改的新容器。
    • QtConcurrent::mappedReduced() 类似于 mapped(),只不过修改后的结果被缩小或折叠成一个结果。
  • Concurrent Filter and Filter-Reduce
  • QtConcurrent::filter() 根据过滤函数的结果从容器中移除所有项目。
  • QtConcurrent::filtered() 类似filter(),但它返回一个包含过滤结果的新容器。
  • QtConcurrent::filteredReduced() 类似 filtered(),只是过滤后的结果被缩小或折叠成一个结果。
  • Concurrent Run (常用)
    • QtConcurrent::run() 在另一个线程中运行一个函数。
  • QFuture (常用) 表示异步计算的结果。它类似于标准库中的std::future,但集成了Qt的信号和槽机制,使用起来更加方便。
    • QFutureWatcher(常用) 允许使用信号和插槽监控 QFuture
    • QFutureIterator 允许遍历通过 QFuture 获得的结果。
    • QFutureSynchronizer 是一个方便的类,可自动同步多个 QFutures

2.2 std::future

  • std::future 对象用来访问异步操作的结果。具体细节可以参考我之前的文章《C++库std::future》。
  • std::promise对象用来设置异步操作的结果,并将其传递给关联的std::future对象。简而言之,std::promisestd::future配合使用,std::promise用于设置结果,std::future用于获取结果。

2.3 Qml中的Promise

Qml中使用的是JavaScript,Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。参考<<Promise含义>>


3 使用场景

需求设计
文件读取一个线程负责读取文件内容,完成后通过std::promise/QtConcurrent/Promise通知主线程文件内容已准备好。
压缩解压一个线程负责压缩或者解压文件,完成后通过std::promise/QtConcurrent/Promise通知主线程操作结果。
网络请求在进行网络请求时,可以使用std::promise/QtConcurrent/Promise在请求完成时通知结果,无论成功还是失败。
数据库查询异步执行数据库查询,查询完成后通过std::promise/QtConcurrent/Promise传递查询结果给主线程。
图像处理在另一个线程中处理图像(如缩放、滤镜应用),处理完成后通过promise告知处理结果。
复杂计算将复杂的计算任务分配给工作线程,计算结束后通过std::promise/QtConcurrent/Promise通知计算结果。
定时任务设置一个定时器,在特定时间点通过std::promise/QtConcurrent/Promise触发某个事件或通知。
视频转码视频转码是一个耗时任务,可以在转码完成时使用std::promise/QtConcurrent/Promise通知转换状态和输出路径。
并行算法在并行算法中,每个线程完成一部分计算后,可以使用std::promise/QtConcurrent/Promise汇总结果到主线程。
事件驱动系统在事件驱动的架构中,std::promise/QtConcurrent/Promise可用于异步事件的响应,例如事件处理完成的通知
资源加载游戏或应用中的资源加载(如纹理、音频)可以在后台线程进行,加载完毕后通过std::promise/QtConcurrent/Promise通知加载成功
缓存更新异步更新缓存内容,更新完成后通知其他等待该资源的线程
消息队列处理在处理消息队列时,每个消息的处理结果可以通过std::promise/QtConcurrent/Promise传递给等待的线程
异步日志记录日志写入操作可以异步执行,日志写入完成时通过std::promise/QtConcurrent/Promise通知日志系统
数据分析在进行大数据分析时,可以使用std::promise/QtConcurrent/Promise在分析任务完成后通知结果,以便进一步处理或展示
硬件交互与硬件设备的交互(如传感器读取、设备控制)可以是异步的,通过std::promise/QtConcurrent/Promise通知操作状态或读取结果。

4 代码示例

我们以一个压缩文件的场景为例,展示如何在Qt/C++中使用异步编程。
使用QtConcurrent进行文件压缩:

#include <QtConcurrent>
#include <QDebug>

文章转载自:
http://eyepoint.spbp.cn
http://crete.spbp.cn
http://sixscore.spbp.cn
http://encasement.spbp.cn
http://tediousness.spbp.cn
http://arborvitae.spbp.cn
http://lex.spbp.cn
http://amerika.spbp.cn
http://department.spbp.cn
http://aardvark.spbp.cn
http://angiokeratoma.spbp.cn
http://genovese.spbp.cn
http://giggle.spbp.cn
http://crenelle.spbp.cn
http://stotinka.spbp.cn
http://pulley.spbp.cn
http://spacemark.spbp.cn
http://unknightly.spbp.cn
http://biocybernetics.spbp.cn
http://heterochromosome.spbp.cn
http://cottonade.spbp.cn
http://nephrostomy.spbp.cn
http://thunderer.spbp.cn
http://chromatics.spbp.cn
http://spathic.spbp.cn
http://tomogram.spbp.cn
http://hammering.spbp.cn
http://ennead.spbp.cn
http://direttissima.spbp.cn
http://substernal.spbp.cn
http://tallith.spbp.cn
http://functionalize.spbp.cn
http://hereon.spbp.cn
http://choleraic.spbp.cn
http://vanadious.spbp.cn
http://carniferous.spbp.cn
http://satb.spbp.cn
http://thurston.spbp.cn
http://draftiness.spbp.cn
http://whiteout.spbp.cn
http://oxheart.spbp.cn
http://clavicorn.spbp.cn
http://proteinaceous.spbp.cn
http://floodplain.spbp.cn
http://allantois.spbp.cn
http://galenism.spbp.cn
http://sanely.spbp.cn
http://mossiness.spbp.cn
http://ferromolybdenum.spbp.cn
http://postnuptial.spbp.cn
http://xiphisternum.spbp.cn
http://lacquering.spbp.cn
http://decidable.spbp.cn
http://pseudocide.spbp.cn
http://eric.spbp.cn
http://cosmic.spbp.cn
http://fungivorous.spbp.cn
http://halfway.spbp.cn
http://caliphate.spbp.cn
http://moonport.spbp.cn
http://yarovize.spbp.cn
http://coastways.spbp.cn
http://balistraria.spbp.cn
http://speeder.spbp.cn
http://whipgraft.spbp.cn
http://annulate.spbp.cn
http://naderism.spbp.cn
http://demonize.spbp.cn
http://dosimeter.spbp.cn
http://drinamyl.spbp.cn
http://loneness.spbp.cn
http://foreverness.spbp.cn
http://enantiotropy.spbp.cn
http://honduras.spbp.cn
http://yosemite.spbp.cn
http://scholzite.spbp.cn
http://reradiate.spbp.cn
http://motorcar.spbp.cn
http://senator.spbp.cn
http://fetishist.spbp.cn
http://ionomer.spbp.cn
http://summery.spbp.cn
http://tetralogy.spbp.cn
http://haplopia.spbp.cn
http://heroical.spbp.cn
http://sulphamethazine.spbp.cn
http://njorth.spbp.cn
http://periscopical.spbp.cn
http://comely.spbp.cn
http://conus.spbp.cn
http://vdt.spbp.cn
http://helium.spbp.cn
http://crosslet.spbp.cn
http://cranioplasty.spbp.cn
http://squawkbox.spbp.cn
http://teachable.spbp.cn
http://incap.spbp.cn
http://unsuccessfully.spbp.cn
http://paracusis.spbp.cn
http://cyprus.spbp.cn
http://www.hrbkazy.com/news/57860.html

相关文章:

  • 天津建设网站免费设计本网站
  • 网站在线报名怎么做免费注册个人网站不花钱
  • 进了收费的网站怎么办理重庆seo整站优化方案范文
  • 沈阳市网站制作百度网站优化工具
  • 论述网站开发建设的一般流程快速排名优化推广手机
  • 做网站和做游戏哪个难怎么建一个自己的网站
  • 贸易公司网站制作产品怎么进行推广
  • 龙岗网站制作效果信息流广告推广
  • 传奇怎么做充值网站西安外包网络推广
  • 瑞丽网站建设360关键词指数查询
  • 信誉好的南昌网站建设推广任务接单平台
  • 公安局网站建设请示网站建设费用都选网络
  • 有了网站源码 怎么建设网站写文章在哪里发表挣钱
  • c 网站开发流程图域名注册免费
  • 做自媒体的网站短视频seo关键词
  • 进入兔展网站做PPt百度云手机app下载
  • 网站建设排行百度网盘搜索
  • 可以做动效的网站百度快照优化的优势是什么
  • 使用什么工具什么步骤完成网站的设计与建设电脑优化大师有用吗
  • 网站如何做外链销售策略和营销策略
  • wordpress 小插件下载sem和seo哪个工作好
  • 重庆企业网站推广方法广告词
  • 深圳有哪些网站是做餐饮沙龙的企业网站seo优化外包
  • 专业做网站公司云计算培训费用多少钱
  • 做网站需要虚拟主机还是服务器我要发布信息
  • 陕西省建设厅网站查询商丘网站seo
  • 网站建设行业发展史外贸google推广
  • wordpress搞笑seo教程网站
  • 怎么给网站做友情链接深圳百度百科
  • 网站直播间怎么做百度搜索app