所以,我正在使用C ++ 11而且我创建了一个类
Class C
{
private:
queue<std::int> s;
pthread_t x;
public:
C() {phthread_create(&x, NULL, d_q, NULL);
void log(int p); // pushes into q.
void* d_q(void* q); // this is a function which will pop s. assume s is thread safe.
}
问题是行pthread_create(&x, NULL, d_q, NULL)
。它给了我Error: Reference to non-static member must be called.
我通过制作pthread_t x static
来摆脱这个问题。但我不想这样做是因为有两个原因:
有人可以给我一个解决方法吗?
解决了:谢谢你的帮助! 另外,一个非常好的建议是更喜欢未来用户使用std :: thread over pthread!
答案 0 :(得分:2)
至于你的问题,你指向(非静态)成员函数的指针不与指向成员函数的指针相同。非静态成员函数需要调用对象的实例。
有几种方法可以解决这个问题:如果你坚持使用POSIX线程函数,那么你可以创建一个static
包装函数,将实例作为参数传递给线程,并在静态包装函数中使用传递的对象调用实际函数。
另一种解决方案是使用std::thread
,这将使其更容易:
class C
{
std::thread thread_;
...
public:
C() : thread_(&C::d_q, this) {}
...
void d_q() { ... }
};