c++线程创建调用类中函数

8 篇文章 0 订阅
4 篇文章 0 订阅

在编写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
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值