使用带有QObject
的 Singleton 模式的正确方法是什么?它将用于多线程?当然,这种方式应排除所有Qt多线程错误,如
QObject:无法为不同的父级创建子级 线程。
答案 0 :(得分:0)
我认为没有一种普遍接受的正确方法可以做到这一点。问题是在现代软件中避免使用Singleton模式,因为对某个对象进行全局引用会使单元测试变得非常困难,有时甚至是不可能的。
不要误解我,将单身人士放在合乎逻辑的地方是可以的。问题在于模式,您可以通过全局变量或函数MySingletonClass::getInstance()
来访问它们。
尝试通过构造函数参数或setter方法将其注入需要的位置。
关于多线程:我不认为Singletons在这方面有任何特殊之处。它们与同时访问的任何对象相同。
答案 1 :(得分:0)
运行时错误消息特定于Qt而不是C ++。当然你可以使用你想要的每个方向在另一个线程上创建的对象。但是你不能将它作为父对象(即Qt)传递给在另一个线程上创建的对象,这样父对象就不会在自身被破坏时销毁它们。它还与Qt消息传递机制和计时器有关。您可能会发现QObject::moveToThread描述也很有趣。