在一些特殊场合,比如保存图片,需要将保存图片的任务放入一个临时的线程中,以提高运行效率。
这里记录几个简单的多线程代码写法。
在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();