Spec-Zone.ru › Qt 5.15

Поддержка потоков

Команды поддержки потоков предназначены для указания уровня поддержки многопоточного программирования в классе или функции. Существует три уровня поддержки: threadsafe, reentrant и nonreentrant.

По умолчанию используется nonreentrant, что означает, что соответствующий класс или функция не может вызываться из нескольких потоков. Reentrant и threadsafe — это уровни, используемые в основном для классов.

Reentrant означает, что все функции в указанном классе могут вызываться одновременно из нескольких потоков, при условии, что каждый вызов функции ссылается на уникальные данные. В то время как threadsafe означает, что все функции в указанном классе могут вызываться одновременно из нескольких потоков, даже когда каждый вызов ссылается на общие данные.

Когда класс помечен как \reentrant или \threadsafe, функции в этом классе могут быть помечены nonreentrant с помощью команды \nonreentrant.

Пример

\beginqdoc
    \class QLocale
    \brief The QLocale class converts between numbers and their
    string representations in various languages.

    \reentrant
    \ingroup i18n
    \ingroup text

    QLocale is initialized with a language/country pair in its
    constructor and offers number-to-string and string-to-number
    conversion functions similar to those in QString.

    ...

    \nonreentrant

    Sets the global default locale to \a locale. These values are
    used when a QLocale object is constructed with no
    arguments. If this function is not called, the system's locale
    is used.

    \warning In a multithreaded application, the default locale
    should be set at application startup, before any non-GUI
    threads are created.

    \sa system(), c()
\endqdoc
void QLocale::setDefault(const QLocale &locale)
{
    default_d = locale.d;
}

QDoc отображает это так:

Класс QLocale

Класс QLocale преобразует числа и их строковые представления на разных языках. Дополнительная информация…

#include <QLocale>

Примечание: Все функции в этом классе являются реентерабельными, за исключением setDefault().

...


Документация типов членов

...

void QLocale::setDefault ( const QLocale & locale )

Устанавливает глобальный локаль по умолчанию на locale. Эти значения используются при создании объекта QLocale без аргументов. Если эта функция не вызывается, используется системный локаль.

Предупреждение: В многопоточной приложении локаль по умолчанию должна быть установлена при запуске приложения, до создания любых потоков, не относящихся к графическому интерфейсу.

Предупреждение: Эта функция не является реентерабельной.

См. также system() и c().

...

Как показано выше, QDoc генерирует уведомление, когда класс объявлен реентерабельным, и перечисляет исключения (объявленные нереентерабельные функции). Включается ссылка на общую документацию по реентерабельности и потокобезопасности. Кроме того, генерируется предупреждение «Предупреждение: Эта функция не является реентерабельной.» в документации функций, не являющихся реентерабельными.

QDoc сгенерирует такое же уведомление и предупреждения, когда класс объявлен потокобезопасным.

Дополнительную информацию см. в общей документации по реентерабельности и потокобезопасности.

Команды

\threadsafe

Команда \threadsafe включает строку в документацию, чтобы указать, что соответствующий класс или функция является потокобезопасным и может вызываться одновременно из нескольких потоков, даже когда отдельные вызовы ссылаются на общие данные.

Команда должна стоять на отдельной строке.

Сгенерированная документация по этой команде будет похожа на то, что генерируется для команды \reentrant. См. пример выше в разделе введение.

См. также \reentrant и \nonreentrant.

\reentrant

Команда \reentrant указывает, что соответствующий класс или функция могут вызываться одновременно из нескольких потоков, при условии, что каждый вызов ссылается на свои собственные данные. См. пример выше.

Команда должна стоять на отдельной строке.

См. также \nonreentrant и \threadsafe.

\nonreentrant

Команда \nonreentrant указывает, что соответствующий класс или функция не могут вызываться из нескольких потоков. Нереентерабельный — это случай по умолчанию.

Команда должна стоять на отдельной строке.

Когда класс помечен как \reentrant или \threadsafe, функции в этом классе могут быть помечены nonreentrant с помощью этой команды в комментарии \fn функций, которые нужно исключить.

См. также \reentrant и \threadsafe.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/17-qdoc-commands-thread.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API