如何将成员函数作为pthread start_routine传递?

时间:2013-08-16 05:58:40

标签: c++

我知道了:

 void* xxx::yyy(void* ThreadIdPtr)

现在我这样做了:

pthread_create( &tp, NULL, xxx::yyy, (void*) &i);

但编译错误:

error: argument of type 'void* (xxx::)(void*)' does not match 
'void* (*)(void*)'

如何正确传递?

2 个答案:

答案 0 :(得分:3)

指向成员函数的指针不是指向函数的指针。这两者并不相同。尝试使用指向成员函数的指针,就像它是一个指向函数的指针一样......好吧,关于你可能希望的最好的是它会快速干净地崩溃。

虽然它可能不是技术上定义的行为,但至少有可能使用指向静态成员函数的指针。然后,您可以将指针作为参数传递给对象,并且可以调用该对象的正确成员函数。

除此之外,您可以使用pthreads期望的普通函数,并使用它完成。

答案 1 :(得分:0)

如果你想将成员函数传递给带有仿函数的函数,你应该这样做:

MyClass a;
some_function(&MyClass::MyMethod, a);

stdlib中每个接受函数指针的函数都有重载来获取成员函数。如果你想在std :: thread cotr中传递它,可以这样做:

std::thread(&MyClass::MyMethod, a, arg1, arg2);