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

查看网站域名广州 关于进一步优化

查看网站域名,广州 关于进一步优化,wordpress转内链,公司做免费网站建设在Qt中#xff0c;有时候我们会遇到这样一种情况#xff0c;需要执行一个很长时间的操作#xff0c;这时候我们的主界面就会卡住。我们的通常做法就是把这个很长时间的操作扔到线程里去处理#xff0c;可以使用标准库中的线程也可以使用QThread。 如果我们要在这个很长时间…        在Qt中有时候我们会遇到这样一种情况需要执行一个很长时间的操作这时候我们的主界面就会卡住。我们的通常做法就是把这个很长时间的操作扔到线程里去处理可以使用标准库中的线程也可以使用QThread。 如果我们要在这个很长时间的操作之后在UI上显示一些东西或者改变一些UI上的控件的状态。这种时候标准库的线程就不是很好用了通常这种时候我们会使用QThread创建一个新的类继承QObject然后再这个新的类里面写一堆信号和槽和主线程通讯传递消息改变UI界面。但是这种太麻烦了每次都要新创建一个类和一堆信号十分不好管理。 在查了资料后我发现了Qt有提供专门并发的类QtConcurrent以及接收异步计算结果的QFuture类。在这里记录一下QtConcurrent和QFuture的使用。 介绍 Concurrent是并发的意思而QtConcurrent同std一样是一个命名空间namespace想使用它需要先在Project工程文件中导入模块并包含头文件QtConcurrent/QtConcurrent。 QT concurrent#include QtConcurrent/QtConcurrent QtConcurrent提供了一些高级的 API使得在编写多线程的时候无需使用低级线程原语如读写锁等待条件或信号。使用QtConcurrent编写的程序会根据可用的处理器内核数自动调整使用的线程数。 QtConcurrent中使用最多的是它的run()函数每调用一次QtConcurrent::run()函数就会新建立一个线程运行我们让它执行的函数。run()函数的返回值QFuture类型的run()函数是有很多重载这里就简单讲几个常用的。 QtConcurrent::run示例 调用全局函数  函数原型 QFutureT QtConcurrent::run(Function func, ...) #include mainwindow.h #include ui_mainwindow.h#include QDebug #include QThread #include QFuture #include QtConcurrent/QtConcurrentMainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui-setupUi(this); }QString func(QString content) {QString str QString(%1 %2 %3.).arg(__FUNCTION__).arg(content).arg(quintptr(QThread::currentThreadId()));return str; }void MainWindow::on_pushButton_clicked() {QFutureQString fut1 QtConcurrent::run(func, QString(Thread_1));// 用QFuture获取该函数的运行结果参数2向func函数传递的参数QFutureQString fut2 QtConcurrent::run(func, QString(Thread_2));QString result1 fut1.result();QString result2 fut2.result();qDebug() result1;qDebug() result2;fut1.waitForFinished();// waitForFinished()保证线程执行完毕fut2.waitForFinished(); }这里使用QFuture的result()函数获取QtConcurrent::run()执行的函数的返回值然后打印出来打印结果如下 调用匿名函数  上面的示例中的func也可以改成匿名函数只是写法上不同结果都是一样的 QFuture QString future QtConcurrent::run([](){QString str QString(%1 %2 %3.).arg(__FUNCTION__).arg(Thread_1).arg(quintptr(QThread::currentThreadId()));return str; }); QFuture QString future2 QtConcurrent::run([](){QString str QString(%1 %2 %3.).arg(__FUNCTION__).arg(Thread_2).arg(quintptr(QThread::currentThreadId()));return str; }); 调用成员函数 同样的QtConcurrent::run()也可以调用成员函数第一个参数必须是一个const引用或一个指向该类实例的指针第二个参数是函数指针 QString MainWindow::func(QString content) {QString str QString(%1 %2 %3.).arg(__FUNCTION__).arg(content).arg(quintptr(QThread::currentThreadId()));return str; }QFutureQString fut1 QtConcurrent::run(this, MainWindow::func, QString(Thread_1)); QFutureQString fut2 QtConcurrent::run(this, MainWindow::func, QString(Thread_2)); 调用其他类的成员函数  调用其他类的成员函数包括Qt提供的函数也是同样的方法 QByteArray bytearray hello,world; QFutureQListQByteArray future QtConcurrent::run(bytearray, QByteArray::split, ,); 使用线程池中的线程调用函数 // 函数原型 template typename T QFutureT QtConcurrent::run(QThreadPool *pool, Function function, ...) 使用QFutureWatcher监视线程 QFuture 表示异步计算的结果QFutureWatcher 则允许使用信号和槽监视 QFuture也就是说QFutureWatcher 是为 QFuture 而生的。 示例开始计算并当完成时通过槽获取结果 // 实例化对象并连接槽到 finished() 信号等线程中函数完成后就会触发连接的槽。 MyClass myObject; QFutureWatcherint watcher; connect(watcher, QFutureWatcherQVectorcomplexdouble::finished, myObject, MyClass::handleFinished);// 开始计算 QFutureint future QtConcurrent::run(...); watcher.setFuture(future); 匿名函数的写法 QFutureWatcherQVectorcomplexdouble* pwatcher new QFutureWatcherQVectorcomplexdouble; QFutureQVectorcomplexdouble future QtConcurrent::run([]() {QVectorcomplexdouble result;// 费时操作在这里执行之后返回QVectorcomplexdouble类型的结果return result; }); connect(pwatcher, QFutureWatcherQVectorcomplexdouble::finished, this, []() {// 使用pwatcher-result()获取在QtConcurrent::run()中的返回值QVectorcomplexdouble img2result pwatcher-result();// 执行费时操作完成之后的操作例如改变UI界面的控件 }); pwatcher-setFuture(future);
http://www.zqtcl.cn/news/744759/

相关文章:

  • 专业集团门户网站建设方案南昌医院网站建设
  • 用php做美食网站有哪些新建网站如何做关键词
  • 企业网站建设招标微信公众平台官网登录入口网页版
  • 网站宣传图网站程序预装
  • 网站设计论文选题seo排名优化推广报价
  • wordpress图床网站百度链接收录
  • 八年级信息网站怎么做电商网站的支付接入该怎么做呢
  • wordpress 的应用大兴安岭地网站seo
  • 网站建站作业做直播网站赚钱
  • 网站建设虍金手指花总简单免费制作手机网站
  • 京东网站是刘强冬自己做的吗献县网站建设价格
  • 余姚什么网站做装修比较好邢台企业做网站哪儿好
  • 网站建设后端国外购物平台排行榜前十名
  • 西安做百度推广网站 怎样备案简述商务网站建设
  • 如何建设本地网站东莞常平限电通知2021
  • 成都网站建设cdajcx重庆推广网站排名价格
  • 建网站的价格网店设计方案计划书
  • 长沙做公司网站如何制作个人网站教程
  • 做一个网站怎么做的仿qq网站程序
  • 曲靖市建设局网站官网织梦可以放两个网站
  • 网站建设方案ppt模板网站怎么做用户登录数据库
  • 做3d图的网站有哪些软件有哪些专业设计企业网站
  • 青海省wap网站建设公司做美工比较好的网站
  • 1个云虚拟主机怎么做多个网站网站规划与建设实验心得
  • led视频网站建设公众号代运营平台
  • 北京微信网站开发费用软件开发做平台
  • 平面设计师必备网站精湛的赣州网站建设
  • 上海市住房和城乡建设部网站官网wordpress页面点赞
  • 试玩平台类网站怎么做的东莞网站关键词推广
  • 网站开发慕枫页面模板怎么删除