QT 并行编程

QT Parallel Programming

本文关键字:编程 并行 QT      更新时间:2023-10-16

我编写了自己的合并排序,在一个线程中工作正常,但是当我尝试并行运行它时,我遇到了错误。

void GameModel::mergesort_mt3(QVector<QPair<int,Matrix>>::iterator begin, 
                          QVector<QPair<int,Matrix>>::iterator end,
               unsigned int N)
{
auto len = std::distance(begin, end);
if (len <= 1024 || N < 2)
{
    std::sort(begin,end);
    return;
}
QVector<QPair<int,Matrix>>::iterator mid = std::next(begin, len/2);
//auto fn = QtConcurrent::run(mergesort_mt3, begin, mid, N-2 );
mergesort_mt3(begin, mid, N-2);
mergesort_mt3(mid, end, N-2);
//fn.waitForFinished();
std::inplace_merge(begin, mid, end);
}

当我使用注释的代码时,出现此错误:

error: no matching function for call to 'run(<unresolved overloaded function 
type>, QPair<int, QPair<QVector<QVector<int> >, int> >*&, QPair<int, 
QPair<QVector<QVector<int> >, int> >*&, unsigned int)'
 auto fn = QtConcurrent::run(mergesort_mt3, begin, mid, N-2 );
                                                            ^
In file included from 
C:/Qt/5.9.1/mingw53_32/include/QtConcurrent/QtConcurrent:14:0,
             from ..Game15model.cpp:2:
note: 
candidate: template<class T> QFuture<T> QtConcurrent::run(T (*)())
QFuture<T> run(T (*functionPointer)())

知道吗,我做错了什么?

这应该是这样的

auto fn = QtConcurrent::run(this, GameModel::mergesort_mt3, begin, mid, N-2 );

请参阅 Qt 成员函数。