2017-10-08 4 views
0

J'ai écrit mon propre tri de fusion, qui fonctionne bien dans un thread, mais quand j'essaie de l'exécuter en parallèle, je reçois une erreur.QT Programmation parallèle

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); 
} 

Lorsque j'utilise le code commenté, je reçois cette erreur:

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 ..\Game15\model.cpp:2: 
note: 
candidate: template<class T> QFuture<T> QtConcurrent::run(T (*)()) 
QFuture<T> run(T (*functionPointer)()) 

Toute idée, ce que je fait de mal?

Répondre

1

Cela devrait être quelque chose comme

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

Voir Qt fonction membre.