Qt 多线程并发高阶类QtConcurrent 的使用

#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 核心数线程数;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/269254.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中毒,重装,杀毒……最近一段时间,很烦的一件事,不断重复……

之前写的&#xff0c;因为最近太多人中毒了&#xff0c;太多人问了&#xff0c;太多人找我了…… 所以&#xff0c;很烦很烦…… 自己简直成了专业杀毒软件&#xff08;麻烦还没有杀毒软件的朋友&#xff0c;用金钱或者其他办法找个杀毒软件&#xff0c;一定…

使用postman发送HttpServletRequest请求

使用postman发送HttpServletRequest请求 使用postman发送HttpServletRequest请求 Headers部分是key: Content-Type value: application/x-www-form-urlencoded 后台使用这个接收String name request.getParameter("name");

QT VS环境安装后出现生成的程序can not start, can not find Qt pligins “windos“ 问题 2021-06-13

QT VS环境安装后出现生成的程序can not start 问题原因: windows kit 没有配置到系统环境变量 解决方法&#xff1a; 添加环境变量

第一次写,python爬虫图片,操作excel。

第一次写博客&#xff0c;其实老早就注册博客园了&#xff0c;有写博客的想法&#xff0c;就是没有行动&#xff0c;总是学了忘&#xff0c;忘了丢&#xff0c;最后啥都没有&#xff0c;电脑里零零散散&#xff0c;东找找&#xff0c;西看看&#xff0c;今天认识到写博客的重要…

JavaScript 异常处理

异常处理概述在代码的运行过程中&#xff0c;错误是不可避免的&#xff0c;总的来说&#xff0c;错误发生于两种情况&#xff1a;一是程序内部的逻辑或者语法错误&#xff0c;二是运行环境或者用户输入中不可预知的数据造成的错误。对于前者&#xff0c;就称之为错误&#xff0…

Oracle根据年份分组

select extract(year from 时间字段 ) year from 表名 GROUP BY extract(year from 时间字段 ) 解释&#xff1a;extract(year from 时间字段) 获取相应的年份 得到的结果为数值类型的。year也可以换成month和day获取月和日 GROUP BY extract(year from 时间字段 ) 对获取的年…

Windows VS c++复制文件到网络共享文件夹的实现

远程建立好共享目录本地创建映射盘代码实现&#xff0c;调用 win32 API CopyFile() 或者命令行调用函数 sysytem&#xff08;&#xff09; 坑&#xff1a; 4. 使用 VS 调试程序的时候会提示无法找到映射盘&#xff0c; 5. CopyFile&#xff08;&#xff09;函数也会提示没有找…

做有意义的事

...现实的社会,要有现实的眼光... 在现在的生活中不公平的,不平等的事情,很多很多, 有时你是不是会想 为什么那个人什么都不行,确能进个好的公司? 为什么有能力的人, 人家确不用你哪?? ___关系. 不成认不行,人家有关系就是比你强. ___金钱. 没人家有钱,送不起礼,你就只能靠…

oracle instant client配置(MAC OS)

oracle instant client配置(MAC OS) vi ~/.bash_profileexport ORACLE_HOME/opt/oracle/instantclient_11_2/ export DYLD_LIBRARY_PATH$ORACLE_HOME export SQLPATH$ORACLE_HOME export TNS_ADMIN$ORACLE_HOME/network/admin export LANGen_US.UTF8 export NLS_LANGAMERICAN_…

对象序例化

package objectOutputStream.cn;import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.io.ObjectInputStream;/** ObjectInputStream 对象的输入流* 构造方法&#xff1a;* ObjectInput…

Qt ftp 文件上传工具开发

一、需求&#xff1a; 1.简单的配置ftp参数界面 2.tcp 客户端端&#xff0c;接收服务器下发的参数信息 3.用户上传操作界面 在这里插入代码片 二、源码#------------------------------------------------- #------------------------------------------------- # # Project c…

微软2008系列 (Orcas + Longhorn Server+SQL2008)将于2008年2月27日发布

据John ( Windows Server Blog, com.coms news blog)&#xff0c;Windows Server 2008, Visual Studio 2008 和 Microsoft SQL Server 2008 将于2008年2月27日 "launch",希望微软不要习惯性的跳票 又据ScottGu 回复&#xff1a;One correction above - the "la…

[Err] ORA-00979: not a GROUP BY expression

not a GROUP BY expression异常产生是因为group by用法的问题。 在使用group by 时&#xff0c;有一个规则需要遵守&#xff0c;即出现在select列表中的字段&#xff0c;如果没有在组函数中&#xff0c;那么必须出现在group by 子句中。&#xff08;select中的字段不可以单独出…

python进程和线程

python 进程和线程 概念 GIL: 全局解释锁&#xff0c;解决了不同线程同时访问统一资源时&#xff0c;数据保护问题。python 虽然是多线程&#xff0c;但是因为GIL,实际上是是单线程&#xff0c;由CPU轮询&#xff0c;假线程。&#xff08;一个线程运行一段时间后会释放GIL, 另一…

arm-linux 交叉编译链接动态库使用

alientekubuntu16:~/code/256APP/App/Module256App/test$ cat build.sh arm-linux-gnueabihf-g TestModule.cpp -I ../include -L ../lib/release -L ./ libModuleSdk.so -L ./ libHalAPI.so -stdc11 -I &#xff1a;指定库的头文件目录 -L &#xff1a;指定库文件.so 所在…

2007高考:考生要根据家庭经济条件慎重填报按办学成本收费的高校及专业

2007高考&#xff1a;考生要根据家庭经济条件慎重填报按办学成本收费的高校及专业来源&#xff1a;[url]http://www.accp-teem.com.cn/ArticleView/2007-7-14/Article_View_1181.Htm[/url] 近年来&#xff0c;普通高校招生中中外合作办学的专业越来越多&#xff0c;中外合作办学…

mybatis中大于等于小于等于的写法

第一种写法&#xff08;1&#xff09;&#xff1a;原符号 < < > > & " 替换符号 < < > > &amp; &apos; &quot; 例如&#xff1a;sql如下&#xff1a; create_date…

makefile编写

多源文件 第三方库 testApp:testApp.o UdpSender.o arm-linux-gnueabihf-g -o testApp testApp.o UdpSender.o -L ./test libi2csmbus.so libads1115.so libHalAPI.so libModuleSdk.so -lpthread --stdgnu11 testApp.o: testApp.cpparm-linux-gnueabihf-g -c testApp.cpp -I…

C++习题 虚函数-计算图形面积

C习题 虚函数-计算图形面积 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 122 Solved: 86[Submit][Status][Web Board]Description 编写一个程序&#xff0c;定义抽象基类Shape&#xff0c;由它派生出5个派生类&#xff1a; Circle(圆形)、Square(正方形)、Rectangle(矩形…

〈理解〉OSI七层

第7层<Application应用层>—直接对应用程序提供服务&#xff0c;应用程序可以变化&#xff0c;但要包括电子消息传输第6层<Presentation表示层>—格式化数据&#xff0c;以便为应用程序提供通用接口。这可以包括加密服务、解压第5层<Session会话层>—在两个节…