Thread-Unterstützung
Mit den Befehlen zur Thread-Unterstützung wird der Grad der Unterstützung für die Multithreading-Programmierung in einer Klasse oder Funktion festgelegt. Es gibt drei Stufen der Unterstützung: threadsafe
, reentrant
und nonreentrant
.
Die Standardeinstellung ist nonreentrant
, was bedeutet, dass die zugehörige Klasse oder Funktion nicht von mehreren Threads aufgerufen werden kann. Reentrant
und threadsafe
sind Stufen, die hauptsächlich für Klassen verwendet werden.
Reentrant
bedeutet, dass alle Funktionen in der referenzierten Klasse gleichzeitig von mehreren Threads aufgerufen werden können, vorausgesetzt, dass jeder Funktionsaufruf auf eindeutige Daten verweist. Während threadsafe
bedeutet, dass alle Funktionen in der referenzierten Klasse gleichzeitig von mehreren Threads aufgerufen werden können, selbst wenn jeder Aufruf auf gemeinsame Daten verweist.
Wenn eine Klasse als \reentrant oder \threadsafe markiert ist, können die Funktionen in dieser Klasse mit dem Befehl \nonreentrant als nonreentrant
markiert werden.
Beispiel
/*! \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() */ void QLocale::setDefault(const QLocale &locale) { default_d = locale.d; }
QDoc erzeugt eine Benachrichtigung, wenn eine Klasse als ablaufinvariant deklariert wird, und listet die Ausnahmen (die deklarierten nicht ablaufinvarianten Funktionen) auf. Ein Link zur allgemeinen Dokumentation über Reentrancy und Thread-Safety ist enthalten. Außerdem wird eine Warnung,"Warning: Diese Funktion ist nicht ablaufinvariant." in der Dokumentation der nicht ablaufinvarianten Funktionen erzeugt.
QDoc generiert die gleiche Benachrichtigung und Warnung, wenn eine Klasse als thread-safe deklariert wird.
Weitere Informationen finden Sie in der allgemeinen Dokumentation zu Reentrancy und Thread-Safety.
Befehle
\threadsafe
Der Befehl \threadsafe fügt eine Zeile in die Dokumentation ein, um anzuzeigen, dass die zugehörige Klasse oder Funktion threadsafe ist und von mehreren Threads gleichzeitig aufgerufen werden kann, selbst wenn getrennte Aufrufe auf gemeinsam genutzte Daten verweisen.
Der Befehl muss in einer eigenen Zeile stehen.
Die mit diesem Befehl erzeugte Dokumentation ähnelt derjenigen, die für den Befehl \reentrant erzeugt wird. Siehe das Beispiel oben in der Einleitung.
Siehe auch \reentrant und \nonreentrant.
\reentrant
Der Befehl \reentrant zeigt an, dass die zugehörige Klasse oder Funktion gleichzeitig von mehreren Threads aufgerufen werden kann, vorausgesetzt, dass jeder Aufruf seine eigenen Daten referenziert. Siehe das obige Beispiel.
Der Befehl muss in einer eigenen Zeile stehen.
Siehe auch \nonreentrant und \threadsafe.
\nonreentrant
Der Befehl \nonreentrant zeigt an, dass die zugehörige Klasse oder Funktion nicht von mehreren Threads aufgerufen werden kann. Nonreentrant ist der Standardfall.
Der Befehl muss in einer eigenen Zeile stehen.
Wenn eine Klasse mit \reentrant oder \threadsafe gekennzeichnet ist, können die Funktionen in dieser Klasse mit diesem Befehl im \fn-Kommentar der auszuschließenden Funktionen mit nonreentrant
gekennzeichnet werden.
Siehe auch \reentrant und \threadsafe.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.