线程函数---静态函数遇到的问题

 
          今天在使用pthread遇到了编译问题:error: argument of type ‘void(类名::~::)()’ does not match ‘void* (*)(void*)’
 
          问题原因线程处理函数声明为static类型,当把线程函数封装在类中,作为类的成员函数时,this指针会作为默认的参数被传进函数中,从而和线程函数参数(void*)不能匹配,不能通过编译。

     解决方案:将线程函数作为静态函数,因为在C++中静态函数没有this指针,可以编译通过。
     但是随即又带来了新的问题,该线程函数无法访问到类的私有变量

     解决方案: 函数间接调用,线程函数(如runthread函数)里不直接实现我们想要实现的内容,调用一个真正实现功能的成员变(run)函数,将this指针作为参数传递给静态函数(runthread),这样可以通过该this指针到所有的变量和函数,可以讲这些变量给run函数,当然,已经不用传参,run函数本身已经访问所有的私有变量了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值