我最近一直在使用c ++ 11中的新std :: thread库,我遇到了一个问题。当我尝试将一个类函数传递给一个新线程时,它给了我一个错误(我现在没有确切的错误文本,因为我离家很远) 我有一个像这样的课程
class A
{
void FunctA();
void FunctB();
void run()
{
std::thread t(FunctA);
std::thread r(FunctB);
}
}
我做错了什么?
答案 0 :(得分:29)
class A
{
void FunctA();
void FunctB();
void run()
{
std::thread t(&A::FunctA, this);
std::thread r(&A::FunctB, this);
}
};
指向成员函数的指针与指向函数的指针不同,调用它们的语法也不同,并且需要类的实例。您只需将指针作为std::thread
构造函数的第二个参数传递给实例。
答案 1 :(得分:2)
class A
{
public:
A( FunctA &fa ) : fa(fa) {}
struct FunctA
{
virtual void operator()() = 0;
}
struct FunctB
{
void operator()()
{
// thread B
}
}
FunctA &fa;
FunctB fb;
void run()
{
std::thread t(fa);
std::thread r(fb);
}
}
答案 2 :(得分:0)
我认为,问题是你不能以类似于函数的方式获得指向成员函数的指针。 Here您可以找到有关此内容的更多信息。
另外,如果你提供了compipler错误文本,那么回答会容易得多。