在编写EventloopThread类中,需要在类中创造新线程并调用类中的函数,却发现pthread_create函数报错,参数不匹配。
例子如下:
class EventloppThread{
public:
void* func (void*);
void create_pthread();
}
void* EventloopThread::func(void*){}//省略实现
void EventloopThread::create_pthread(){
pthread_create(&pthread,NULL,&Eventloop::func,NULL);//erro
}
在网上查过后发现不匹配的原因是类中函数func的函数类型是‘void* (EventloopThread::)(void*),而不是(void*)(func)(void),类中的函数会自带一个this类标识(指针)。
解决方法:
将func函数声明为static全局函数,再传入this指针,若要对类中非静态变量进行调用,用this指针间接调用。
修改后的代码:
class EventloppThread{
public:
static void* func (void*x);
void create_pthread();
}
void* EventloopThread::func(void*x){
EventloopThread* p=(EventloopThread*)x;
p->
}//省略实现
void EventloopThread::create_pthread(){
pthread_create(&pthread,NULL,&Eventloop::func,this);//ok
}