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

来源:互联网 发布:win7 telnet 端口 编辑:程序博客网 时间:2024/06/03 15:39

在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;就可以访问类中非静态属性和方法 省略}}
0 0
原创粉丝点击