【技术问题】C++多线程pthread_create error: invalid use of non-static member function

问题如下

pthread_create error: invalid use of non-static member function

先简要解释下pthread_create这个函数的各个参数:
param1: 为指向线程标识符的指针。
param2: 用来设置线程属性。
param3: 线程运行函数的起始地址。
param4: 运行函数的参数。

出错往往是第三个参数,报错的原因要求我们要将该参数设置成静态函数,但是这里有个问题 ,这个函数我们往往可能需要访问到它所属类的非静态成员变量,而设置成静态函数的话只能访问静态变量了。就如下这个例子是编译不过的

/* 错误例子 */
//StaticAddOne这个函数是HttpServer的静态成员函数
void* HttpServer::StaticAddOne(){
    this->nums ++;  //this不能出现在静态成员中,编译不通过
}

那怎么办呢,我们可以再写一个静态函数,然后把上面的AddOne放进去。注意 此时我们就不需要static来修饰AddOne函数了。

//Static_ExecAddOne这个函数是HttpServer的静态成员函数
void* HttpServer::Static_ExecAddOne(void* pThis)
{
	static_cast<HttpServer *>(pThis)->AddOne();
}

使用pthread_create的使用只需要把this指针当做参数传入就行了,如下:

pthread_create(&thread_id, NULL, Static_ExecAddOne, (void*)this);

这样就可以保证AddOne可以访问到类中的其他非静态成员变量了,同时也不会报错。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值