C++中类的成员函数作为 pthread_create的线程函数

在C++的类中,普通成员函数作为pthread_create的线程函数就会出现参数问题,因为其不能作为pthread_create的线程函数,如果要作为pthread_create中的线程函数,必须是static !
为什么呢?
当把线程函数封装在类中,this指针会作为默认的参数被传进函数中,从而和线程函数参数(void*)不能匹配,不能通过编译。
但是当我把类中的作为pthread_create的线程函数改为static之后,又遇到新的问题?即在该方法中访问其他非静态方法或者是变量时,没法访问,关于这个问题又怎么解决呢?
答案:将this指针作为参数传递即可。

struct PthreadParams{
     Tree* pThis;
     /*
     *其它相应的参数 省略
     **/
}
class Tree {
 public :
 void splitPthread(TreeNode<Sample>* node, const std::vector<Sample*>& data){
 /**
 相应程序业务处理 省略
 **/
pthread_t ThreadLeft,ThreadRgiht;  //定义线程
PthreadParams leftparams,rightparams;
//设置leftparams相应的参数 省略
pthread_create(&ThreadLeft,NULL,grow, (void*)leftparams);                   pthread_create(&ThreadRgiht,NULL,grow,(void*)rightparams);                  
pthread_join(ThreadLeft,NULL);
pthread_join(ThreadRgiht,NULL);
 }
static  void grow(void *p){
    PthreadParams *ptr = (PthreadParams*)p;
    //通过ptr->pThis;就可以访问类中非静态属性和方法 省略
}
}
  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值