//在c++编译环境下编译pthread_create会报错,出现问题的主要原因就是pthread_create的第3个参数——void*(void*)这个回调函数。
//下面给出解决方法:
//将要调用的函数改成静态函数或全局函数:
#include <iostream>
using namespace std;
#include <pthread.h>
void *Bar(void *arg)
{
cout << __PRETTY_FUNCTION__ << endl;
}
class Foo {
public:
Foo();
~Foo();
static void * Bar(void *arg);
private:
pthread_t tid_self;
pthread_t tid_other;
};
Foo::Foo()
{
pthread_create(&tid_self, NULL, &Bar, NULL);
pthread_join(tid_self, NULL);
pthread_create(&tid_other, NULL, &::Bar, NULL);
}
Foo::~Foo()
{
pthread_join(tid_other, NULL);
}
void * Foo::Bar(void *arg)
{
cout << __PRETTY_FUNCTION__ << endl;
}
int main(int argc, char *argv[])
{
Foo foo;
return 0;
}
//若要调用类的成员,则用如下方法:
//将传递的参数定义为struct:
struct myarg{
//其他参数
Foo* pFoo;
}
//然后在函数调用中:
void*Foo::Bar(void*arg)
{
struct myarg* parg = (struct myarg*) arg;
Foo* pFoo = parg->pFoo;
//下面就可以调用Foo的成员变量了
}