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();
//本类中的其他属性或函数
}
在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();
//本类中的其他属性或函数
}
相关文章推荐
- pthread_create如何传递多个参数
- pthread_create如何传递多个参数
- pthread_create如何传递多个参数
- pthread_create如何传递多个参数
- pthread_create如何传递多个参数
- pthread_create传递参数/单个或者多个
- pthread_create 参数传递指针问题
- [转载]pthread_create传递参数/单个或者多个
- pthread_create传递参数
- pthread_create如何传递两个参数以上的参数
- pthread_create 参数传递指针问题
- pthread_create 参数传递指针问题(创建多线程时,循环变量的传递)
- pthread_create 传递参数时指针跑飞问题
- 如何给线程函数 beginthread 和 pthread_create 传递参数
- pthread_create()给创建的线程传递参数
- 使用pthread_create时参数的传递
- pthread_create 参数传递指针问题
- C++ 一些参数传递技巧及建议及局部静态函数
- pthread_create如何传递两个参数以上的参数
- pthread_create如何传递多个参数 .