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
- C++中类的成员函数作为 pthread_create的线程函数
- 类成员函数作为pthread_create函数参数
- 类成员函数作为pthread_create函数参数
- MFC类成员函数作为线程函数的解决办法
- 类成员函数作为线程函数的方法
- MFC类成员函数作为线程函数的解决办法
- 类成员函数作为线程函数的几种方法
- 类的非静态成员函数作为线程函数
- 类的成员函数作为线程入口函数
- C++使用线程函数pthread_create时,调用的成员函数要定义为静态成员函数
- 任意类成员函数作为线程参数的封装
- 任意类成员函数作为线程参数的封装ex
- 类成员函数作为线程参数的用法
- 类成员函数作为线程函数
- 类成员函数作为线程函数
- 类成员函数作为线程函数
- 类成员函数作为线程函数
- 类成员函数作为线程函数
- JNDI的理解
- Android系统架构
- Cocoapods多模块开发
- 自定义SeekBarPreference
- STL(1)、vector c++ 用法
- C++中类的成员函数作为 pthread_create的线程函数
- 使用ajaxSubmit异步上传图片并展示
- RGB/YUV/YCbCr--关于显示,颜色你需要了解的一些 事 入门扫盲好文章
- C++实验4-----输出星号图
- C++第4次作业
- yum源的配置
- BF算法
- C# 加载xml文档文件及加载xml字符串
- LeetCode - Ugly Number