ToB企服应用市场:ToB评测及商务社交产业平台

标题: Qt 中用Q_GLOBAL_STATIC来实现线程安全的单例模式 [打印本页]

作者: 天津储鑫盛钢材现货供应商    时间: 2024-5-20 03:55
标题: 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创建的对象在第一次利用时对自身进行初始化,这意味着它不会增加应用步伐或库的加载时间。此外,该对象在所有平台上都以线程安全的方式进行初始化。
  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企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4