How to execute a class member function in a separate thread using C++11 thread class?

余生长醉 提交于 2019-11-27 03:50:29

问题


I'm trying to use the C++11's std::thread class to run a member function of a class to execute in parallel.

The header file's code is similar to:

class SomeClass {
    vector<int> classVector;
    void threadFunction(bool arg1, bool arg2);
public:
    void otherFunction();
};

The cpp file is similar to:

void SomeClass::threadFunction(bool arg1, bool arg2) {
    //thread task
}

void SomeClass::otherFunction() {
    thread t1(&SomeClass::threadFunction, arg1, arg2, *this);
    t1.join();
}

I am using Xcode 4.6.1 under Mac OS X 10.8.3. The compiler I am using is Apple LLVM 4.2 which came with the Xcode.

The above code does not work. The compiler error says that "Attempted to use deleted function".

On the line of thread creation it shows the following massage.

In instantiation of function template specialization 'std::__1::thread::thread<void (SomeClass::*)(bool, bool), bool &, bool &, FETD2DSolver &, void>' requested here

I'm new in C++11 and the thread class. Could someone help me?


回答1:


The instance should be the second argument, like so:

std::thread t1(&SomeClass::threadFunction, *this, arg1, arg2);



回答2:


I still had problems with the above answer (I think it was complaining it could not copy over a smart pointer?), so rephrased it with a lambda:

void SomeClass::otherFunction() {
  thread t1([this,arg1,arg2](){ threadFunction(arg1,arg2); });
  t1.detach();
}

Then it compiled and ran fine. AFAIK, this is just as efficient, and personally I find it more readable.

(Note: I've also changed join() to detach() as I expect that was the intent.)



来源:https://stackoverflow.com/questions/15734598/how-to-execute-a-class-member-function-in-a-separate-thread-using-c11-thread-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!