MFC用静态变量和静态函数实现定义全局变量和全局函数

静态变量和静态函数有如下性质:

若在一个类中用关键字static声明数据成员,则这个数据成员就只存在一个拷贝,无论该类创建了多少个实例,它始终只存在一个,即使该类的实例一个也没创建,它也存在。若在一个类中用关键字static声明函数,该函数可以用“类名::函数名”方式访问,无需引用该类的实例,甚至这个类的实例可以不存在。

利用这个性质实现的全局变量和函数使用起来很方便。

值得注意的是,全局变量和全局函数最好集中封装,不要在文档、视图等类内部定义,这样用起来才有全局的感觉。

例:

  1. 添加一个没有基类的新类,设类名起为CPublic,姑且称之为公用类。新建一个项目,命名为UnknowGear,在类选项卡的项目名称上右键选择New Class…,在Name栏中填入类名CPublic,选择Class typeGeneric Class,单击确定,则新类建立完毕。
  1. 在public.h中定义全局变量或全局函数。

Alt

  1. 在public.cpp中初始化全局变量或全局函数。

Alt

  1. 全局变量或全局函数的使用。

使用变量:CPublic::变量名
使用函数:CPublic::函数()

在需要使用全局变量或全局函数的文件中包含public.h文件。

Alt
Alt

结束

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MFC 的头文件中创建全局变量时,需要注意多线程环境下的线程安全性。如果在 COM 组件接口函数中保存数据出错,可能是由于多线程访问全局变量时引发的竞争条件。 下面是一些可能导致问题的原因和解决方法: 1. 竞争条件:如果多个线程同时访问和修改全局变量,可能会导致数据不一致或崩溃。确保在访问全局变量时使用适当的同步机制,例如互斥锁或临界区。 2. 初始化问题:全局变量的初始化可能会影响到 COM 组件接口函数的数据保存。确保在使用全局变量之前进行正确的初始化,或者考虑将变量声明为静态局部变量,并在需要时进行延迟初始化。 3. 跨线程访问问题:如果 COM 组件接口函数在不同的线程中调用,那么直接访问全局变量可能会引发问题。考虑使用线程间通信机制,如消息队列或线程安全的队列,将数据从接口函数传递到其他线程进行保存。 4. 对象生命周期问题:如果全局变量是某个对象的成员变量,并且该对象在 COM 组件接口函数完成后销毁,那么保存的数据也会丢失。确保对象的生命周期符合保存数据的要求,或者将数据复制到其他地方进行保存。 综上所述,为了避免在 COM 组件接口函数中保存数据出错,需要注意线程安全性、正确的初始化、跨线程访问和对象生命周期等问题。根据具体情况进行适当的调整和改进,以确保数据的正确保存和访问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值