Bonjour,
dans le but de paralléliser du traitement, j'ai vu que Qt proposé la classe QtConcurrent, qui d'après ce que j'ai compris, gère automatiquement la parallélisation.
La méthode que je souhaite passer dans QtConcurrent::blockingMapped contient plusieurs paramètres. La doc Qt signale alors que la méthode doit être binded mais j'obtiens encore des erreurs et je commence à être à cours d'idée ...
J'ai également implanté ma méthode dans QtConcurrent::run qui fonctionne parfaitement.
J'ai fais une classe pour l'utilisation de QtConcurrent et une autre classe contenant la méthode a utilisé dans QtConcurrent.
Je suis sous Qt5.2.1 avec MSVC2010.
J'ai ajouté dans le header "tri_son.h" : #include <functional> pour utiliser la fonction std::tr1::bind().
Dans le *.pro :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 QT += core gui concurrent CONFIG += c++11Ma classe qui contient la méthode a paralléliser :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 void Tri_Son::on_pushButton_start_clicked() { if(wavpathList.size() == 1) { logstream << statusDirSrc << "\n"; ProcessSearch* proc = new ProcessSearch(); connect(proc, SIGNAL(statuslog(QString)), this, SLOT(log(QString))); connect(proc, SIGNAL(status(int)), this, SLOT(statusProcess(int))); QtConcurrent::run(proc, &ProcessSearch::Search, wavpathList.at(0), pathDest, wavList); } if(wavpathList.size() > 1) { ProcessSearch proc ; QtConcurrent::blockingMapped(wavList, std::tr1::bind(&ProcessSearch::Search, &proc, std::tr1::placeholders::_1, pathDest, wavList)); } }
J'obtiens plusieurs erreurs de type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 class ProcessSearch : public QObject { Q_OBJECT public: explicit ProcessSearch(QObject *parent = 0); void Search(const QString startDir, const QString destDir, QList<QString> wavList); signals: void status(int); void statuslog(QString); private: QString startDir, destDir; QList<QString> wavList; };
Code : Sélectionner tout - Visualiser dans une fenêtre à part forming reference to void
Si quelqu'un pourrait m'expliquer mes erreurs. Merci ^^
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 .../include/QtCore/qlist.h: In instantiation of 'class QList<void>': ../tri/tri_son.cpp:193:144: required from here .../include/QtCore/qlist.h:478:17: error: forming reference to void inline const T &QList<T>::at(int i) const
Partager