您的位置:首页 > 编程语言 > C语言/C++

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

2014-12-09 14:03 211 查看
逛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();
//本类中的其他属性或函数

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: