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 回答