Qt:并发

1060 篇文章 307 订阅

理论

Qt Concurrent模块包含支持并发执行程序代码的功能。

Qt Concurrent 命名空间提供高层次的API,使人们有可能不写使用低级线程原语的多线程程序,如互斥,读写锁,等待条件或信号。

Qt Concurrent模块扩展了Qt Core模块中提供的基本线程支持,并简化了可在所有可用CPU内核上并行执行的代码的开发。

Qt Concurrent编写的程序会根据可用的处理器内核数自动调整使用的线程数。这意味着今天编写的应用程序将来在将来部署到多核系统上时将继续扩展。

Qt Concurrent包括用于并行列表处理的功能性编程样式API,包括用于共享内存(非分布式)系统的MapReduce和FilterReduce实现,以及用于在GUI应用程序中管理异步计算的类:

Qt Concurrent支持几种兼容STL的容器和迭代器类型,但最适合具有随机访问迭代器的Qt容器,例如QListQVector。映射和过滤器函数接受容器和开始/结束迭代器。

STL迭代器支持概述:

 

迭代器类型示例类支持状态
输入迭代器 不支持
输出迭代器 不支持
正向迭代器std :: slist支持的
双向迭代器QLinkedList,std :: list支持的
随机访问迭代器QListQVector,std :: vector支持和推荐

在Qt Concurrent对大量轻量级项目进行迭代的情况下,随机访问迭代器可以更快,因为它们允许跳转到容器中的任何点。另外,使用随机访问迭代器允许Qt Concurrent通过QFuture :: progressValue()和QFutureWatcher :: progressValueChanged()提供进度信息。

调用时,非原位修改函数(例如,mapped()和filtered())会复制容器。如果您使用的是STL容器,则此复制操作可能会花费一些时间,在这种情况下,我们建议改为指定容器的开始和结束迭代器。

实践

1、QT += concurrent

2、

#include <QCoreApplication>
#include <QDebug>
#include <QThread>
#include <QtConcurrent>
void printMes(QString mes)
{
    qDebug()<<"pprintMes thread : "<<QThread::currentThreadId();
    qDebug()<<mes;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    qDebug()<<"mainthread :"<<QThread::currentThreadId();

    QString mes = "hello world";
    QtConcurrent::run(printMes,mes);
    return a.exec();
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值