Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
138 views
in Technique[技术] by (71.8m points)

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

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

The instance should be the second argument, like so:

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...