QtTaskTree::QThreadFunction Class
template <typename ResultType> class QtTaskTree::QThreadFunctionModèle de classe permettant de contrôler l'exécution d'une fonction dans un thread distinct via QtConcurrent::run(). En savoir plus...
| En-tête : | #include <qthreadfunctiontask.h> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS TaskTree) target_link_libraries(mytarget PRIVATE Qt6::TaskTree) |
| qmake : | QT += tasktree |
| Depuis : | Qt 6.11 |
| Hérite de : | QtTaskTree::QThreadFunctionBase |
| Statut : | Aperçu technologique |
Cette classe est en préversion technologique et est susceptible d'être modifiée.
Remarque : toutes les fonctions de cette classe sont réentrantes.
Fonctions publiques
| QThreadFunction(QObject *parent = nullptr) | |
| virtual | ~QThreadFunction() override |
| QFuture<ResultType> | future() const |
| QFutureWatcher<ResultType> * | futureWatcher() |
| const QFutureWatcher<ResultType> * | futureWatcher() const |
| bool | isAutoDelayedSync() const |
| bool | isDone() const |
| bool | isResultAvailable() const |
| ResultType | result() const |
| ResultType | resultAt(int index) const |
| QList<ResultType> | results() const |
| void | setAutoDelayedSync(bool on) |
| void | setThreadFunctionData(Function &&function, Args &&... args) |
| void | setThreadPool(QThreadPool *pool) |
| ResultType | takeResult() const |
| QThreadPool * | threadPool() const |
Description détaillée
Une classe QThreadFunction est un modèle de classe pratique, dans lequel ResultType spécifie le type de retour de la fonction stockée, qui combine une fonction stockée destinée à être appelée ultérieurement via QtConcurrent::run() avec une QFutureWatcher interne surveillant l'exécution de la fonction. Utilisez QThreadFunctionTask pour exécuter la classe QThreadFunction dans le cadre de la recette « QTaskTree ».
Définissez une fonction avec ses arguments à exécuter dans un thread distinct à l’aide de la méthode setThreadFunctionData().
Pour signaler une erreur depuis l’intérieur de la fonction s’exécutant dans un thread distinct, placez l’argument QPromise<ResultType> &promise dans cette fonction en tant que premier argument, puis annulez le « future » de la promesse. Exemple :
static void copyFile(QPromise<void> &promise, const QString &source,
const QString &destination)
{
const QFileInfo fi(source);
if (!fi.exists()) {
promise.future().cancel(); // The QThreadFunction finishes with DoneResult::Error
return;
}
// Copy file...
}
QThreadFunction<void> task;
task.setThreadFunctionData(copyFile, "source.txt", "dest.txt");
task.start();global thread poolUtilisez ` setThreadPool()` pour exécuter une fonction dans l’ QThreadPool souhaité ; sinon, la fonction utilisera l’ par défaut.
Utilisez ` setAutoDelayedSync()` pour activer ou désactiver la synchronisation différée automatique.
Pour contrôler l’exécution de la fonction, connectez-vous aux signaux de la fonction associée futureWatcher(). Pour récupérer les données de sortie, utilisez les getters result(), resultAt() ou results().
Documentation des fonctions membres
[implicit] QThreadFunction::QThreadFunction(QObject *parent = nullptr)
Crée un objet `QThreadFunction` avec un ` parent` donné.
[override virtual] QThreadFunction::~QThreadFunction()
Supprime l'QThreadFunction. Si l'QThreadFunction n'est pas en cours d'exécution, aucune autre action n'est effectuée ; dans le cas contraire, le « future » associé est annulé et, en fonction de la synchronisation différée automatique, les actions suivantes sont effectuées :
| Synchronisation différée automatique | Action |
|---|---|
| Activé | L’ QFuture e associée est stockée dans le registre global. Utilisez QThreadFunctionBase::syncAll() à la fermeture de l’application pour synchroniser tous les futurs précédemment stockés dans le registre global. |
| Désactivée | Un appel bloquant à QFuture::waitForFinished() est exécuté directement. |
Lorsque la synchronisation différée automatique est activée, l’annulation de la tâche future peut être interceptée au sein de la fonction encore en cours d’exécution dans un thread distinct, de sorte qu’elle puisse se terminer dès que possible sans avoir achevé sa tâche.
Enfin, à la fermeture de l’application, la fonction ` QThreadFunctionBase::syncAll()` doit être appelée afin de synchroniser toutes les fonctions susceptibles d’être encore en cours d’exécution dans des threads distincts. L’appel à ` QThreadFunctionBase::syncAll()` est bloquant au cas où certaines fonctions seraient encore en cours de finalisation.
Remarque : lorsque la synchronisation différée automatique est activée, la fonction continue de s’exécuter pendant un certain temps après la fin du destructeur de ` QThreadFunction` ; il incombe donc à l’utilisateur de s’assurer que toutes les données sur lesquelles la fonction est susceptible d’opérer sont toujours disponibles. Si cela ne peut être garanti, désactivez la synchronisation différée automatique via ` QThreadFunction::setAutoDelayedSync(false)`. Dans ce cas, le destructeur de ` QThreadFunction ` attendra de manière bloquante que la fonction ait terminé son exécution avant de supprimer ` QThreadFunction`. Reportez-vous à la documentation de ` QCustomTask ` pour plus d’informations sur le paramètre de modèle ` Deleter `.
Voir également setAutoDelayedSync() et syncAll().
QFuture<ResultType> QThreadFunction::future() const
Renvoie l'QFuture e <ResultType> associé à la fonction exécutée dans un thread distinct.
QFutureWatcher<ResultType> *QThreadFunction::futureWatcher()
Renvoie le pointeur vers l'QFutureWatcher<ResultType> associé à la fonction exécutée dans un thread distinct. La durée de vie de l' renvoyé est liée à l'instance d'QThreadFunction.
Utilisez cette fonction si vous avez besoin d'un contrôle accru sur l'exécution future, par exemple pour vous connecter aux signaux de progression de l'observateur renvoyé.
const QFutureWatcher<ResultType> *QThreadFunction::futureWatcher() const
Renvoie le pointeur « const » vers l’objet « QFutureWatcher<ResultType> » associé à la fonction exécutée dans un thread distinct.
Il s'agit d'une fonction surchargée.
bool QThreadFunction::isAutoDelayedSync() const
Indique si la synchronisation différée automatique est activée.
Voir également syncAll() et setAutoDelayedSync().
bool QThreadFunction::isDone() const
Indique si l'exécution de la fonction est terminée.
bool QThreadFunction::isResultAvailable() const
Indique si le résultat est prêt.
Voir également result().
ResultType QThreadFunction::result() const
Renvoie le ResultType signalé par la fonction exécutée dans un thread distinct.
Remarque : assurez-vous que le résultat est prêt en appelant ` isResultAvailable()`, sinon l'appel à `result()` risque de se bloquer si le résultat n'a pas encore été renvoyé, voire de provoquer un plantage si l'exécution de la fonction s'est terminée sans renvoyer de résultat.
Voir également QFutureWatcher::result().
ResultType QThreadFunction::resultAt(int index) const
Renvoie le ResultType signalé par la fonction exécutée dans un thread distinct à l'adresse index.
Voir également result() et QFutureWatcher::resultAt().
QList<ResultType> QThreadFunction::results() const
Renvoie la liste des objets de type ResultType renvoyés par la fonction exécutée dans un thread distinct.
Voir également result(), resultAt() et QFuture::results().
void QThreadFunction::setAutoDelayedSync(bool on)
Définit la synchronisation différée automatique sur ` on`.
Par défaut, la synchronisation différée automatique est activée, ce qui signifie que la destruction de l’objet ` QThreadFunction ` en cours d’exécution n’entraînera pas d’attente bloquante jusqu’à ce que la fonction s’exécutant dans un thread séparé soit terminée. Au lieu de cela, l’ QFuture ` associée est annulée, et la fonction continue de s’exécuter jusqu’à ce qu’elle soit terminée. L'annulation peut être interceptée par la fonction s'exécutant dans un thread séparé via l’argument ` QPromise `, de sorte qu’elle puisse se terminer prématurément sans avoir achevé sa tâche. Si la synchronisation différée automatique est activée, il est nécessaire d’appeler ` QThreadFunctionBase::syncAll()` à la fermeture de l’application, afin de synchroniser toutes les fonctions susceptibles de s’exécuter dans des threads séparés.
Lorsque la synchronisation différée automatique est désactivée, la synchronisation a lieu lors de la destruction de ` QThreadFunction`, ce qui peut bloquer le thread appelant pendant un temps considérable.
La synchronisation automatique n’est utilisée que lorsque la fonction ` QThreadFunction ` a été exécutée depuis le thread principal.
Voir également syncAll() et isAutoDelayedSync().
template <typename Function, typename... Args> void QThreadFunction::setThreadFunctionData(Function &&function, Args &&... args)
Définit l'function, qui sera exécutée avec les paramètres args transmis dans un thread distinct lors de l'appel de la fonction start().
Voir également QtConcurrent::run().
void QThreadFunction::setThreadPool(QThreadPool *pool)
Définit l'QThreadPool pool à utiliser lors de l'exécution de l'appel. Si l'pool transmis est nullptr, la fonction QThreadPool::globalInstance() est utilisée.
Voir également threadPool().
ResultType QThreadFunction::takeResult() const
Récupère (transfère) le `ResultType` renvoyé par la fonction exécutée dans un thread distinct.
Remarque : assurez-vous que le résultat est prêt en appelant isResultAvailable(), sinon l'appel à takeResult() risque de se bloquer si le résultat n'a pas encore été renvoyé, voire de provoquer un plantage si l'exécution de la fonction s'est terminée sans renvoyer de résultat.
Voir également QFuture::takeResult().
QThreadPool *QThreadFunction::threadPool() const
Renvoie le pool de threads utilisé lors de l'exécution de l'appel. Si la valeur « nullptr » est renvoyée, la fonction ` QThreadPool::globalInstance()` est utilisée.
Voir également setThreadPool().
© 2026 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.