1

Qtのドキュメントには、すべてのQDateTime関数が再入可能であると記載されています。これは、Qtの用語では、別のスレッドでQDateTimeの新しいオブジェクトを作成すると、安全に操作できることを意味します。しかし、次の静的メンバーはスレッドセーフですか:QDateTime::currentDateTimeおよびQDateTime::fromTime_t?

セカンダリスレッドのコード:

 // Is line below thread safe?
 QDateTime tDateTimeNow1 = QDateTime::currentDateTime(); 

 // The below code should be no different then the one above..
 QDateTime tDateTimeNow2; 
 tDateTimeNow2 = tDateTimeNow2.currentDateTime(); 

この記事の次のステートメントで混乱していますhttp://doc.qt.nokia.com/4.7-snapshot/thread-basics.html: "QDateTime :: currentDateTime()はQtでスレッドセーフとしてマークされていませんドキュメントですが、QDateTime :: currentDateTime()静的メソッドが他のスレッドで使用されていないことがわかっているため、この小さな例では使用をやめることができます。」

QDateTime :: currentDateTime()をセカンダリスレッドで使用できない場合、スレッドセーフな方法で現在の日時を使用してQDateTimeオブジェクトを作成するにはどうすればよいですか?

上記のような他の静的メンバー関数は、スレッドで安全に使用できるかどうかわかりません。1)QTimer :: singleShot 2)QString :: fromUtf8 3)QString:number

4

1 に答える 1

4

現在の時刻でQDateTimeオブジェクトを取得するためのスレッドセーフな方法が必要な場合は、安全でない呼び出しを保護する関数を作成してください。

QDateTime getCurrentTime()
{
    static QMutex mutex;
    QMutexLocker locker(&mutex);
    return QDateTime::currentDateTime();

}
于 2012-09-15T00:58:11.477 に答える