静态函数里不能访问成员变量

因为静态是针对类的,而成员变量为对象所有。

 

如果要访问的话:

 

一:可以把要用的参数通过void * argslist 传递进线程函数

二:设置一个静态变量,静态变量可以指向你要调用对象的,然后在线程函数中直接调用

三:可以把类成员变量设置成静态的,这样就可以在线程函数中直接调用

看看你的代码int val=a是不可能调用的因为没有this指针,你可以采用我的第一个方案,传递进一个this指针,表明a是属于哪个对象的

//或者有没有办法在启动线程的时候使用类的成员函数?

不可能的否则你会产生大错的,因为线程函数是不会传递进this指针的,没有this指针成员函数不能工作,因此不可能把成员函数做线程函数的!但是因静态成员函数不需要this就可以工作,因此可以用做线程函数。(参见:《win32多线程程序设计》)

代码如下:
class test 
{ 
private: 
 int a; 
 int b; 

public: 
 test() 
 { 

 } 
 static void loop(void * argslist ) 
 { 
  test *This=(test*)argslist;
  int val=This->a; 
  while(1) 
  { 
   Sleep(1000); 
  } 
 } 
 int StartThread() 
 { 
  return _beginthread(loop,0,(void*)this);
 } 

}; 
int main() 
{ 
 test *t= new test(); 
 t->StartThread(); 
 return 0; 
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值