2012-04-03 3 views
5

멤버 함수에 대한 호출을 병렬 처리하는 데 사용할 QFuture를 만듭니다. 더 정확하게, 내가 .H와 클래스 solveParallel이 다음 메도 runCompute()가 myFutureCompute 멤버를 만드는멤버 함수를 사용하는 QtConcurrent

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

    void runCompute(solveModel * model_); 

    bool resultComput(); 

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

. .cpp는 다음과 같습니다.

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

포함되어 있습니다. 컴파일이 오류와 함께 라인

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

에 실패 또한

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 

, 코드의 같은 라인에서 '& 관리자'에 대한 마우스 정보에 대한 것은 약자 오류 : 비 정적 멤버 참조는 상대적이어야합니다 특정 개체에.

트릭이 어디 있는지 알고 있습니까? 고마워, 안부. official documentation에서

답변

14

는 :

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.

당신은 포인터에 대한 포인터를가 possing 있습니다. 또한 사용자가하는 것처럼 인수를 전달할 수는 없지만 run 함수에서 추가 인수로 전달할 수 있습니다. 다음 작업을 수행해야합니다.

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