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++11
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));
    }
}
Ma 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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
forming reference to void
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
Si quelqu'un pourrait m'expliquer mes erreurs. Merci ^^