Qt简单的多线程应用

这篇博客介绍了如何在Qt和C++环境中利用多线程技术优化图片保存过程,以提高程序运行效率。通过QtConcurrent库在Qt中实现并发保存图片,以及使用标准库std::thread在C++中创建线程进行图片保存,并讨论了是否需要等待线程结束的两种情况。
摘要由CSDN通过智能技术生成

在一些特殊场合,比如保存图片,需要将保存图片的任务放入一个临时的线程中,以提高运行效率。

这里记录几个简单的多线程代码写法。

在Qt中对于容器的多线程处理,类似于omp

Qt版:

#include <QtConcurrent>



struct sSaveImage

{

QStrimg strPath;

QImage imgSaveImg;

};



QList<sSaveImage> lstsaveimgs;



auto future = QtConcurrent::map(lstsaveimgs, [&](const sSaveImage& saveimg) {

bool ret = saveimg.imgSaveImg.save(saveimg.strPath);

});

//加入这句,表示需要等待线程结束

future.waitForFinished();

Qt版:

#include <QtConcurrent>

//需要保存的路径
QString savepath = "d:\\1.png";
//需要保存的图片
QImage saveimg;
QtConcurrent::run([&](const QString& path, const QImage& img)->void {
	bool ret = img.save(savepath);
}, savepath, saveimg);

C++版:

#include <thread>
//需要保存的路径
std::string savepath = "d:\\1.png";
//需要保存的图片
cv::Mat saveimg;
std::thread thread1([&](const std::string& path, cv::Mat& img) {
	//保存图片
	cv::imwrite(savepath, img);
}, savepath, saveimg);

//需要等待线程结束
//thread1.join();

//不需要等待线程结束
thread1.detach();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值