线程函数如何访问cpp文件中的全局变量

fkengun 2009-03-02 08:39:50
我有一个类A,在这个类A的实现文件,也就是A.cpp文件中声明了几个全局变量(不在任何函数内声明的应该是全局变量吧)
现在也就是在这个A.cpp文件中创建了一个线程,线程中需要访问这几个全局变量。createthread的时候传的是this指针,
然后在线程函数里转成A类的指针A_Ptr使用。同时,在A类中有一个B类的私有的指针变量B_Ptr。访问全局变量的时候是这样的:
A_Ptr->B_Ptr->一个B类的接口函数(在参数中访问了那几个全局变量);
但是编译的时候VC报错,错误为B_Ptr不能访问A类中声明的私有变量,但是我觉得我没有用到私有变量啊,难道那几个全局变量变成私有变量了?

各位大虾帮帮忙,给小弟一个解决办法吧。
...全文
203 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
nieoding 2009-03-04
  • 打赏
  • 举报
回复
暴露一个访问这个私有变量的方法

class A{
private:
B* pB;
public:
B* get_PB(){return pB;}
}

boost::thread

class B{
public:
void test(){
}
};
class A{
private:
boost::shared_ptr<B> b_;
public:
A(){
b_.reset(new B);
boost::thread thd(&A::threadTest);
}
private:
void threadTest(){
b_->test();
}
};
vagrantisme 2009-03-03
  • 打赏
  • 举报
回复
1楼说得很对。但本人建议全局变量最好放在一个GlobalVar的文件里,最好是用类或结构进行封装一下。
yanghoo9988 2009-03-03
  • 打赏
  • 举报
回复
全局变量只能被模块内访问,如果要在别的文件或者模块调用,需要将其声明前加extern,在使用的文件中包含其头文件即可.
fkengun 2009-03-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 IamNieo 的回复:]
要不暴露一个访问这个私有变量的方法出来
要不用boost::thread将线程方法改写为类成员函数,而不是静态函数
[/Quote]
能不能给个例子,小弟不是很懂
nieoding 2009-03-03
  • 打赏
  • 举报
回复
要不暴露一个访问这个私有变量的方法出来
要不用boost::thread将线程方法改写为类成员函数,而不是静态函数
fkengun 2009-03-03
  • 打赏
  • 举报
回复
say sorry to IamNieo 和 bottlebox两位
是我自己搞错了,问题已经更新为我在4楼的回复
而且那个私有的友元类的指针变量不能改为public
O(∩_∩)O谢谢
瓶盒 2009-03-03
  • 打赏
  • 举报
回复
如果在类中访问可以定义为友元类,楼主是在全局函数中访问,只能把B_Ptr->一个B类的接口函数封装成A类的一个
函数去调用它,或者就把A类中的B对象变为公有成员。
nieoding 2009-03-03
  • 打赏
  • 举报
回复


class B{
public:
void test(){
}
};
class A{
private:
B* pB;
public:
A(){
pB = new B();
CreateThread(threadTest,this);
}
public:
static DWORD threadTest(void* p){
A* pThis = (A*)p;
pThis->pB->test();
}
};


对于pThis而言,pB就是私有的,当然编译是通过不了的,把pB改成public就好了
fkengun 2009-03-03
  • 打赏
  • 举报
回复
不好意思
我搞错了
现在的基本情况不变,问题变成一个线程如何访问一个类的私有变量
线程函数里使用强制类型转换把传进来的指针参数转成类的指针,然后通过这个类的指针访问这个类的私有变量
编译器报错:不能访问私有变量
求救啊
fkengun 2009-03-03
  • 打赏
  • 举报
回复
我的全局变量的声明和使用它的线程函数在同一个文件中
而且我在声明的时候加了extern还是不对,错误还是一样的,还是不能访问私有变量,我的这种情况不属于私有变量吧

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧