在pthreads中使用成员函数(Linux)
我试图使用以下内容:
pthread_create(&searchThread [i],&threadAttribs [i],DoStuff,&ParallelParams [i]);
如果DoStuff是静态的,它会编译,但是我不能访问DoStuff所在类中的任何方法或变量。但是,如果我将DoStuff保留为非静态方法,以便可以访问其他所有内容该类我得到以下编译器错误:
错误:类型'void *(MyClass ::)(void *)'的参数不匹配'void *()(void)'
错误似乎指的是DoStuff参数以及它是成员函数的事实。
有没有希望能够通过一个非静态方法让我在我的DoStuff方法中访问MyClass中的所有内容?
谢谢!
pthreads需要一个void* startfunc(void*)
签名,而非静态成员函数具有隐藏的this
指针,所以你必须避开它。 一个简单的方法是在类中创建一个静态辅助函数。 将其用作启动函数,并在第4个(数据)参数中传递要访问的对象。 像这样的东西:
class Foo
{
public:
void *runThis(void)
{
std::cout << "Thread accessing this member function" << std::endl;
return 0;
}
static void *runHelper(void *classRef)
{
return ((Foo *)classRef)->runThis();
}
};
int main(int argc, char *argv[])
{
Foo foo;
pthread_t t;
pthread_create(&t, NULL, &Foo::runHelper, &foo);
pthread_join(t, NULL);
}
有一些很有用的模板方法可以达到上述类似的效果,但更通用。
链接地址: http://www.djcxy.com/p/96367.html上一篇: using member functions in pthreads (Linux)
下一篇: how to access a non static member from a static method in java?