#include <QCoreApplication>
#include <QtConcurrent>
#include <QDebug>
#include <iostream>
#include <csignal>
#include <unistd.h>
using namespace std;int g_1 = 0;// 测试中断方式
void  signalHandler(int signum)
{qDebug() << "Receive signal ("<< signum << ")。";
}void function(int &num)
{num = num * 10;qDebug() << QThread::currentThreadId() <<num;
}double fuc(int a ,int b) {if ( b == 0 ) {throw b;}double ret = a/b;return ret;
}int testTryCatch()
{double res;try                                            //定义异常{res = fuc(6, 3);cout<<"The result of x/y is : "<<res<<endl;res = fuc(4,0);                                //出现异常}catch(double)                                    //捕获并处理异常{cerr<<"error of dividing zero.\n";exit(1);                                    //异常退出程序}return 0;
}void mapFunc(QString& data){qDebug() << data << QThread::currentThreadId();data.append("_new");g_1 += 1;qDebug()<< g_1 << QThread::currentThreadId();
}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);//    testTryCatch();//    auto lmd = [] (int& para) {//        para += 10;
//        return para;
//    };//    int p(10);
//    qDebug() << lmd(p);
//    qDebug() << p;    QList<int> list = {1,2,3,4,5};
    QtConcurrent::map(list, function);
//    qDebug() << QThread::currentThreadId();    QtConcurrent::run(function, 1);//    signal(SIGINT, signalHandler);
//    while (true) {//        qDebug() << "to sleep";
//        sleep(1);
//    }QMap<int, QString> dataMap;dataMap.insert(1, "first");dataMap.insert(2, "second");QtConcurrent::blockingMap(dataMap, mapFunc);qDebug() << dataMap;qDebug() << g_1;return a.exec();
}

QtConcurrent 是Qt中高阶的多线类模块
比 Qthread 更加方便,在使用的时候一般使用静态成员函数来实现各种形式的多线程;
典型使用方法是:处理使用list、map 这样的容器存储的数据,每一个容器里的元素会产生一个线程来处理

例子中, dataMap 插入了两个元素, 使用blockingMap函数来处理这个dataMap的数据,这种类似于信号量方式处理相同类型的批量数据,但是已经封装了类似于QMutex 这样的安全处理,保证操作的原子性;
主要区别:根据需要处理的数据量,和平台核心数自动分配线程
而且会自动动态扫描运行所在设备平台cpu 核心数线程数;

Qt 多线程并发高阶类QtConcurrent 的使用相关推荐

  1. java处理高并发高负载类网站的优化方法

    java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,java高负载数据) 一:高并发高负载类网站关注点之数据库 没错,首先是数据库,这是大多数应用所面临的首个SPOF ...

  2. java处理高并发高负载类网站问题

    java处理高并发高负载类网站问题 一:高并发高负载类网站关注点之数据库 没错,首先是数据库,这是大多数应用所面临的首个SPOF.尤其是Web2.0的应用,数据库的响应是首先要解决的. 一般来说MyS ...

  3. Qt 多线程基础及线程使用方式

    文章目录 Qt 多线程操作 2.线程类QThread 3.多线程使用:方式一 4.多线程使用:方式二 5.Qt 线程池的使用 Qt 多线程操作 应用程序在某些情况下需要处理比较复杂的逻辑, 如果只有一 ...

  4. 解决多线程高并发问题常用类

    Volatile关键字 1.volatile解决可见性 //创建一个类继承Thread类 public class MyThread extends Thread{//定义一个共享的静态成员变量,供多 ...

  5. 多线程与高并发基础一(超发--多线程悲观锁,乐观锁、类数据库悲观锁乐观锁)

    PS:看完文章后对自己以前所做过的并发和锁机制有了深入原理的了解. 知其然和知其所以然! 遂以记之! 关键词: 线程,同步,单例,高并发,高访问,死锁 一.大规模并发带来的挑战 在过去的工作中,我曾经 ...

  6. 多线程与高并发-volatile与CAS

    多线程与高并发-volatile与CAS 1.volatile 1.1volatile的作用 1.2 DCL单例模式 1.3 volatile与synchronized的区分 2.CAS ABA问题 ...

  7. 多线程导出excel高并发_大牛带你深入java多线程与高并发:JMH与Disruptor,确定能学会?...

    前言 今天我们讲两个内容,第一个是JMH,第二个是Disruptor.这两个内容是给大家做更进一步的这种多线程和高并发的一些专业上的处理.生产环境之中我们很可能不自己定义消息队列,而是使用 Disru ...

  8. java多线程实例_多线程&高并发(全网最新:面试题+导图+笔记)面试手稳心不慌...

    前言 当你开始开始去跳槽面试的时候,明明只是一份15K的工作,却问你会不会多线程,懂不懂高并发,火箭造得让你猝及不防,结果就是凉凉:现如今市场,多线程.高并发编程.分布式.负载均衡.集群等可以说是现在 ...

  9. 多线程&高并发(全网最新:面试题 + 导图 + 核心学习笔记)面试手稳心不慌,轻松拿下 offer,秋招跳槽必不可少的底层能力

    前言 当你开始开始去跳槽面试的时候,明明只是一份 15K 的工作,却问你会不会多线程,懂不懂高并发,火箭造得让你猝及不防,结果就是凉凉:现如今市场,多线程.高并发编程.分布式.负载均衡.集群等可以说是 ...

最新文章

  1. SqlServer2008到期升级企业版 密钥+图解
  2. CrackMe-CrackHead
  3. Visual Studio 2005常用插件搜罗
  4. 4G EPS 中建立 UE 与 eNB 之间的 RRC 连接
  5. 关于抢红包的_关于抢红包的作文500字
  6. 详解:数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名及手工脚本创建oracle数据库...
  7. firebug中html显示为灰色的原因总结
  8. linux入门基础——linux网络配置
  9. Docker之Dockerfile详解
  10. P4027-[NOI2007]货币兑换【斜率优化dp,CDQ分治】
  11. 在代码中设置TextView 的字体颜色
  12. 有段时间没更新了。。。放上我在做的东东的截图
  13. python 控制语句
  14. Linux 进入 5.0 时代!
  15. ios app上传图片与文件到服务器,iOS开发之上传图片视频到服务器
  16. 红米开发版刷机教程_红米K30开发版刷机包(官方完整最新固件升级包MIUI12)
  17. java flv 转swf_nginx-http-flv-module flv拉流错误整理
  18. JAVA当前时间timestamp_java获取获得Timestamp类型的当前系统时间
  19. 服务器装系统03系统,windows server 2003 服务器安装教程完整版
  20. ionic ion-refresher 下拉刷新的使用。

热门文章

  1. 服务端配置实现AJAX跨域请求
  2. Linux出现NOKEY
  3. Halcon:手眼标定——眼在手外与眼在手上
  4. TI Davinci DM6441嵌入式Linux移植攻略——UBL移植篇
  5. HALCON示例程序measure_circuit_width_lines_gauss.hdev电路板线宽检测
  6. HALCON示例程序color_fuses.hdev通过颜色对保险丝进行分类
  7. 图像极坐标变换及在OCR中的应用
  8. python list遍历定位元素_python for循环,第二遍定位不到元素?
  9. echarts 4.0.4怎么下载_怎么让ECharts的提示框tooltip自动轮播?
  10. window 下的mysql_Windows下MySQL下载安装、配置与使用