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

How to pass a member function as pthread start_routine?

本文关键字:start pthread routine 传递 成员 函数      更新时间:2023-10-16

我得到了:

 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);