QtConcurrent::blockingMapped
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:
1 2
| QT += core gui concurrent
CONFIG += c++11 |
Code:
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));
}
} |
Ma classe qui contient la méthode a paralléliser :
Code:
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;
}; |
J'obtiens plusieurs erreurs de type :
Code:
forming reference to void
Code:
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 |
Si quelqu'un pourrait m'expliquer mes erreurs. Merci ^^