|
Problème sur threadExécute et hexécuterequête. |
|
Stagiaire WDF
Inscrit: 21/08/2008 15:50
Post(s): 4
|
Bonjour à tous.
Voila je vous expose mon problème.
Dans une fenêtre il y a un onglet de 2 volet. Chacun de ces volets possède une table. Chaque table est alimenté par une requête spécifique.
Certaines de ces requêtes (Accès Natif Oracle) sont assez lourde. Donc pour ne pas bloquer les utilisateurs, l'alimentation de ces tables ce fait par le biais de 2 thread différent.
Chacun de ces threads gère 1 requête et l'affichage du résultat dans la table concerné.
La requête 1 doit sortir 6 lignes. Cette requête est exécuté en 4 sec par un requeteur classique. La requête 2 doit sortir 35000 lignes. Cette requête est exécuter en 45 sec pas un requeteur classique.
Le but de l'utilisation des thread, était pour moi, de séparé les 2 traitements et donc que pendant que la requete 1 alimente la table 1, la requête 2 continu sont travail et l'utilisateur n'a pas besoin d'attendre le chargement de la requête 2 dans la table 2 pour travailler sur la table 1.
Mais voila, problème, le thread 1 semble attendre la fin de l'exécution du HexecuteRequeteSQL du thread 2, car la table 1 se remplis qu'au chargement de la table 2. Je dirais même que le threads 2 bloque tous, car même si les boutons de la fenêtre sont actifs, leur code ne s'éxécute pas...
Donc perte de l'utilité des thread...
Aucun ThreadAttendsSignale n'est déclaré.
Chacun des threads possède un Hconnexion et HdecritConnexion différent.
Précision : Aucun code dans la fenêtre à part sur 1 bouton (ouvre(Fen_toto)), Thread 1 et 2 sont appelé à l'initialisation de la fenêtre. Tester avec SQLconnecte et SQLExec mais même problème.
Quelqu'un à t'il une idée ou à déjà rencontré ce problème?
Merci pour vos réponse.
Tester en V8, et V10.
Contribution le : 02/06/2009 15:54
|
|
|
Re: Problème sur threadExécute et hexécuterequête. |
|
Stagiaire WDF
Inscrit: 12/06/2009 00:54
Post(s): 1
|
As tu trouvé une solution à ton problème?
si oui, cela m'intéresse...
Cordialement
Contribution le : 12/06/2009 00:55
|
|
|
Re: Problème sur threadExécute et hexécuterequête. |
|
Stagiaire WDF
Inscrit: 21/08/2008 15:50
Post(s): 4
|
Salut,
Excuse moi pas revenus depuis un moment.
Pour répondre à ta question, oui j'ai trouver une pseudo solution, qui donne des résultat assez variable.
La procédure qui est appelé par ton thread doit être hors contexte de la fenêtre.
Tes procédures doivent donc être global au projet. Chaque thread doit utiliser sa propre connexion avec HdécritConnexion(). Et l'initialisation de mes données se fait pour chaque table et non plus à l'initialisation de la fenêtre.
Une autre solution consiste à prédéfinir quel requête sera la moins longue à s'exécuter, et d'envoyer un signal au thread qui possède la requête la plus longue. Cette solution est très moche, mais fonctionne...
Si tu veux plus d'informations détaillé, je serais ravis de t'en donner.
Contribution le : 16/07/2009 12:09
Edité par ecarvin sur 16/7/2009 12:28:27
|
|
Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.