2017-09-27 2 views
0

Pouvez-vous interroger un QSqlQuery (par exemple query.value) sur un thread autre que celui de la connexion/exécution?Interrogation de QSqlQuery sur un autre thread

+0

Avez-vous essayé? Essayez-le et parlez-nous de votre expérience. – eyllanesc

+0

Je ne l'ai pas essayé mais je le veux. Le code étant multithread il peut prendre un certain temps avant qu'il ne se bloque aléatoirement et je suis plus curieux si l'architecture QSqlQuery le supporte –

Répondre

0

Selon le Qt docs, c'est pas pris en charge:

Une connexion ne peut être utilisé à l'intérieur du fil qui l'a créé. Le déplacement de connexions entre threads ou la création de requêtes à partir d'un thread différent n'est pas pris en charge.

En outre, les bibliothèques tierces utilisées par QSqlDrivers peuvent imposer des restrictions supplémentaires sur l'utilisation du module SQL dans un programme multithread. Consultez le manuel de votre client de base de données pour plus d'informations

Donc, à tout le moins, vous devez add a new database connection (avec un nom unique) pour chaque fil que vous souhaitez exécuter une requête à partir.

+0

Je fais référence à l'utilisation de QSqlQuery après l'exécution. Cache-t-il le résultat entier? Utilise-t-il la connexion si je ne fais que parcourir les enregistrements et lire toutes les valeurs? –

+0

@PascalauRazvan. Alors demandez-vous s'il est possible de passer un objet "QSqlQuery" actif entre les threads? Quel problème essayez-vous de résoudre en faisant cela? Souhaitez-vous éviter d'envoyer tous les résultats au fil principal? – ekhumoro

+0

@ ekhumoro Je ne veux pas faire l'analyse du résultat sur le même thread que la connexion db a été créée (j'ai sérialisé l'accès à se produire sur un thread au lieu d'avoir plusieurs connexions). Et oui je veux savoir si je peux utiliser cette QSqlQuery active sur le thread de l'appelant. –