我得到了:
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*)'
如何正确传递?
指向成员函数的指针是而不是指向函数的指针。两者根本不一样。正在尝试将指向成员函数的指针用作指向函数的指针。。。好吧,你所能期望的最好的结果就是它能迅速干净地坠毁。
虽然它可能不是技术上定义的行为,但至少有一个合理的机会可以使用指向静态成员函数的指针。然后,您可以将指向对象的指针作为参数传递,它可以调用该对象的适当成员函数。
除此之外,您可以使用pthreads期望的普通函数,并使用它完成操作
如果你想把成员函数传递给一个接受函子的函数,你应该这样做:
MyClass a;
some_function(&MyClass::MyMethod, a);
stdlib中的每个将指针指向函数的函数都有重载来获取成员函数。如果你想在std::thread-cotr中传递它,可以这样做:
std::thread(&MyClass::MyMethod, a, arg1, arg2);