为什么在C++使用pthread_create()的时候,类成员函数做线程的处理函数必须要定义成static类型的?
来源:互联网 发布:淘宝澳洲代购真假 编辑:程序博客网 时间:2024/04/29 14:40
后来发现将线程处理函数声明为static类型,问题得解。
摘自:http://hi.chinaunix.net/?uid-11770217-action-viewspace-itemid-48886
将线程函数作为静态函数,因为在C++中静态函数没有this指针(即在内存中静态函数和普通全局函数几乎没有什么区别),故可以匹配编译通过, 但是当线程函数要访问私有变量呢?可以访问到吗?答案是不可以!
解决方案: 将this指针作为参数传递给静态函数,这样可以通过该this指针访问所有的私有变量, 但是我要是还需要向静态函数中传递我自己需要的参数呢?
答案是:将this指针和需要的参数作为一个结构体一起传给静态函数,请看下面代码:
#include <iostream>
#include "pthread.h"
using namespace std;
class A;
struct ARG
{
};
class A
{
};
A::A()
{
}
A::~A()
{
}
void* A::thread(void* args)
{
}
void A::excute()
{
}
int main()
{
}
- 为什么在C++使用pthread_create()的时候,类成员函数做线程的处理函数必须要定义成static类型的?
- 为什么在C++使用pthread_create()的时候,类成员函数做线程的处理函数必须要定义成static类型的?
- C/C++——为什么类的静态成员函数在定义的时候不写static?
- C++使用线程函数pthread_create时,调用的成员函数要定义为静态成员函数
- 为什么 没有缺省构造函数的类类型成员 必需要在初始化列表 里初始化 ?
- Python的列表等变量的声明必须要在函数定义与函数调用之前
- 构造函数必须要初始化的数据成员
- java 的main()方法为啥必须要public static void类型的??java中的静态成员
- C++ 类的成员函数定义在.h中为什么会产生函数重定义错误?
- main()方法为啥必须要public static void类型的??java中的静态成员
- main()方法为啥必须要public static void类型的??java中的静态成员
- main()方法为啥必须要public static void类型的??java中的静态成员
- 类的static函数成员在定义时不用要static
- 为什么类中的线程函数必须要声明静态?
- 为什么类中的线程函数必须要声明静态?
- 为什么类中的线程函数必须要声明静态?
- 为什么类中的线程函数必须要声明静态?
- 【c++】为什么类中静态(static)成员不能在类的定义内初始化?
- Xdebug+phpstorm配置
- 下拉菜单
- Linux学习笔记<基础概念>
- Cocos2dx 3.X jsb加载JavaScript源码文件分析
- CCF 201503-1 图像旋转 题解
- 为什么在C++使用pthread_create()的时候,类成员函数做线程的处理函数必须要定义成static类型的?
- poj1113Wall凸包入门题 模板
- Apache POI组件操作Excel,制作报表(一)
- 画图-CCF测试往届题
- 软件安全学习笔记(7):PE文件总体格式
- 【java】异常处理
- 菜鸟系列——康托展开
- 《剑指offer》二叉搜索树与双向链表
- Angularjs ng-table的使用(可以加button)以及angularjs学习资料