Qt 中用Q_GLOBAL_STATIC来实现线程安全的单例模式

打印 上一主题 下一主题

主题 875|帖子 875|积分 2625


  • 官方阐明:
    Qt中有个宏Q_GLOBAL_STATIC 可以用来创建一个全局静态变量,下面看下官方文档的阐明:
Q_GLOBAL_STATIC(Type, VariableName)
Creates a global and static object of type QGlobalStatic, of name VariableName and that behaves as a pointer to Type. The object created by Q_GLOBAL_STATIC initializes itself on the first use, which means that it will not increase the application or the library's load time. Additionally, the object is initialized in a thread-safe manner on all platforms.
The typical use of this macro is as follows, in a global context (that is, outside of any function bodies):
Q_GLOBAL_STATIC(MyType, staticType)
官方文档说的意思是:
创建名为VariableName的QGlobalStatic类型的全局和静态对象,其举动类似于指向Type的指针。由Q_GLOBAL_STATIC创建的对象在第一次利用时对自身进行初始化,这意味着它不会增加应用步伐或库的加载时间。此外,该对象在所有平台上都以线程安全的方式进行初始化。

  • 利用方法:
    官方的阐明中就已经说了利用方法 _GLOBAL_STATIC(MyType, staticType)
  • 实例阐明:
    singleton.h
  1. #ifndef SINGLETON_H
  2. #define SINGLETON_H
  3. #include <QGlobalStatic>
  4. #define SINGLETON Singleton::instance()
  5. class Singleton
  6. {
  7. public:
  8.     Singleton() {}
  9.     virtual ~Singleton() {}
  10. public:
  11.     static Singleton* instance();
  12. public:
  13.     void setValue(int value);
  14.     int getValue();
  15. prive:
  16.     int m_value;
  17. };
  18. #endif // SINGLETON_H
复制代码
singleton.cpp
  1. #include "singleton.h"
  2. Q_GLOBAL_STATIC(Singleton, theSingleton)
  3. Rule* Singleton::instance()
  4. {
  5.     return theSingleton();
  6. }
  7. void Singleton::setValue(int value)
  8. {
  9.     m_value = value);
  10. }
  11. int Singleton::getValue()
  12. {
  13.     return m_value;
  14. }
复制代码
调用方法:
如上面的单例在需要调用的地方可以用如下方法来赋值和取值:
  1. Singleton::instance()->setValue(520);
  2. int value = Singleton::instance()->getValue();
复制代码
也可以直接用界说的宏来调用
  1. SINGLETON->setValue(520);
  2. int value = SINGLETON->getValue();
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

天津储鑫盛钢材现货供应商

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表