Библиотека Qt — потокобезопасность статических функций-членов

В документации 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: число

0

Решение

Если вам нужен потокобезопасный способ получить объект QDateTime с текущим временем, создайте функцию, которая защищает небезопасный вызов.

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

}
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]