C++ pthread_create传递静态函数及其参数

逛CSDN很久了,从今天开始在此记录遇到的一些比较有意义的问题,方便自己记忆,也方便正遇到这类问题的朋友们,有不对的地方请指正!

在C++的中,普通成员函数不能直接作为pthread_create的线程函数,必须是static静态成员函数作为pthread_create中的线程函数。这样的话,pthread_create函数的第四个参数既要传递静态函数所属类的本身this,又要传递静态函数所需要的参数,运用起来就比较棘手了。

解决方法如下:

首先在主线程函数中,采用如下方式建立线程

int arg_tr[2]; //存储函数需要的参数与this地址

arg_tr[0]=(int)A;
arg_tr[1]=(int)this;
ret=pthread_create(&thread_id,NULL,warning_work,(void *)&arg_tr[0]);   //
通过arg_tr指针将两个信息都传输过去

在静态函数中:

void *B::warning_work(void *arg )    //声明时使用static void *warning_work(void *arg),定义时不用static。

{

int *p=(int *)arg;

    A *aa= (A *)p[0];
    B *bb=(B *)p[1];

aa->c.....; //作为函数参数使用

bb->dd(); //本类中的其他属性或函数

}



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值