私は自分のプロジェクトでスレッドセーフな QObject シングルトンを使用していますが、QMutex や QThread ではなく QtConcurrent を使用してそれらを作成するのが正しいかどうか疑問に思っていました。
シングルトンコードを書く方法は次のとおりです。
class A : public QObject
{
Q_OBJECT
public:
A() {}
static A* sharedInstance() {
static QFuture<A*> helper = QtConcurrent::run([]() -> A* {
auto *instance = new A();
instance->moveToThread(qApp->thread());
return instance;
});
return (A*)helper;
}
};
これは次の方法よりも優れていますか?
class A : public QObject
{
Q_OBJECT
public:
A() {}
static A* sharedInstance() {
static A* instance = 0;
static QMutex mtx;
mtx.lock();
if (!instance) {
instance = new A();
instance->moveToThread(qApp->thread());
}
mtx.unlock();
return instance;
}
};
または、これを行う他のより良い方法はありますか?
ありがとうございました。
注: 共有インスタンスの破棄は個別に処理しています。
編集:共有インスタンスをメインスレッドに配置したい。