2012-04-03 4 views
5

Ich erstelle eine QFuture, die ich verwenden möchte, um Aufrufe an eine Member-Funktion zu parallelisieren. Genauer gesagt, ich eine Klasse solveParallel mit .h haben:QtConcurrent mit Member-Funktion

class solverParallel { 
public: 
    solverParallelData(Manager* mgr_); 
    virtual ~solverParallel(void); 

    void runCompute(solveModel * model_); 

    bool resultComput(); 

private: 
    Manager *myMgr; 
    QFuture<bool> myFutureCompute; 
}; 

, wo die Methode runCompute(), um das myFutureCompute Mitglied erstellt. .cpp sieht aus wie

solveParallel::solveParallel(Manager* mgr_) 
:m_mgr(mgr_) 
{ 
} 

solverParallel::~solverParallel(void){} 

void solverParallel::runCompute(solveModel* model) 
{ 
    futureComput = QtConcurrent::run(&this->myMgr,&Manager::compute(model)); 
} 

bool solverParallelData::resultComput() 
{ 
    return m_futureComput.result(); 
} 

Include (s) sind in Ordnung. Compilation fehlschlägt, auf Linie

futureComput = QtConcurrent::run(&this->myMgr,&Manager::compute(model)); 

mit diesem Fehler:

Error 44 error C2784: 'QFuture<T> QtConcurrent::run(T (__cdecl *)(Param1),const  Arg1 &)' : could not deduce template argument for 'T (__cdecl *) (Param1)' from 'Manager **' solverparallel.cpp 31 

Zusätzlich auf Maus-Info für '&-Manager' in derselben Codezeile steht: Fehler: eine nicht-statische Mitglied Referenz muss relativ zu einem bestimmten Objekt.

Siehst du, wo ist der Trick? Danke und Grüße.

Antwort

14

Vom official documentation:

QtConcurrent::run() also accepts pointers to member functions. The first argument must be either a const reference or a pointer to an instance of the class. Passing by const reference is useful when calling const member functions; passing by pointer is useful for calling non-const member functions that modify the instance.

Du possing einen Zeiger auf einen Zeiger. Beachten Sie auch, dass Sie die Argumente nicht wie gewohnt übergeben können, sondern als zusätzliche Argumente in der Funktion run. Folgendes sollte funktionieren:

futureComput = QtConcurrent::run(this->myMgr,&Manager::compute, model); 
Verwandte Themen