逛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(); //本类中的其他属性或函数
}