IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

requête partagée entre plusieurs thread


Sujet :

WinDev

  1. #1
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut requête partagée entre plusieurs thread
    hello tout le monde !

    petite question pour me confirmer, (ou pas), ce que je pense :

    parce que je ne vois pas du tout comment simuler un tel cas...

    soit une requête "REQ", paramétrée, dans mon projet.
    soit 2 thread, bien distinct, "thread1" et "thread2", dans ce projet.

    si thread1 execute REQ avec le paramètre "A", et au même moment, thread2 fait de même avec le paramètre "B".
    Chaque thread aura son bon résultat ?
    ou ça va être un "bordel" ?

    J'ai envie de dire que oui, chacun aura son résultat conforme, car, ben, c'est des thread bien séparés...

    Mais ce qui me dérange, c'est l'option de copie complète/légère/... du contexte HFSQL pour les thread...
    J'avoue, malgré avoir lu et relu la doc, que c'est pas encore bien clair dans ma tête...

    merci pour vos avis !

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2019
    Messages : 16
    Points : 29
    Points
    29
    Par défaut
    Bonjour,

    Je te conseillerai de stocker tes résultats dans un tableau de structure.
    La gestion du contexte des requêtes est maintenant bien mieux gérée, mais le jour où tu vas avoir un problème, tu va galérer pour identifier de quoi ça vient.

    Les threads sont aussi mieux gérés, mais il faut être vraiment "propre" dans la façon d'écrire le code.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    J'ajouterais ceci : le problème des deux thread est le suivant, tu ne sera jamais lequel des deux terminera sont travails en premier.
    Puisque autant le premier que le deuxième peuvent avoir plus de travail.

  4. #4
    Membre éclairé
    Avatar de Narwe
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2013
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 253
    Points : 668
    Points
    668
    Par défaut
    Je compléterais les réponses ci-dessous en parlant des sections critique (SectionCritiqueDébut, SectionCritiqueFin).

    Dans cette section critique, il y aurait l'exécution de la requête, le stockage dans un tableau et la libération de la requête.
    Le traitement des résultats, s'il peut être géré indépendamment d'un thread à l'autre, pourrais être fait en dehors de la section critique permettant à l'autre thread d'exécuté la requête sans attendre la fin du traitement du premier thread.

  5. #5
    Membre éclairé
    Avatar de Narwe
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2013
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 253
    Points : 668
    Points
    668
    Par défaut
    Il y a aussi peut-être une autre solution en passant par la fonction HAlias qui devrait rendre les 2 requêtes indépendante. mais j'avoue que la remarque "Remarque : Lors de la création de l'alias, la requête initiale doit avoir été exécutée." me gène un peu (à tord surement).

  6. #6
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    alors D'après les essais que j'ai pu faire (manuellement),

    ça semble être ok.
    Mais je n'arrive pas à les faire exécuter cette requête exactement au même moment, genre à la milliseconde prêt...

    Après, ces 2 thread tournent en boucle.
    Donc aucun ne termine vraiment son travail avant l'autre.
    De temps en temps, ils exécutent cette requête.

    Bon, d'après la doc (que je lis et relis), le context HFSQL est bien différent d'un thread à l'autre.
    D'ailleurs un thread ne peut pas accéder au context HFSQL d'un autre thread !
    Ce qui semble logique.

    Je suis pas sûr que la gestion des sémaphores/mutes/sections critiques aient leur place dans mon cas !!??
    je ne partage pas de ressources en mémoires, mais une requête, qui justement bénéficie du context HFSQL indépendant à chaque Thread !
    ou alors j'ai vraiment rien compris à ce qui est expliqué dans l'aide de Windev...

    Un autre sujet sur le forum disait que si 2 thread écrivaient dans un même fichier, il se pourrait que les informations se chevauchent.
    Dans mon expérience, j'ai plusieurs applications, qui ont un seul fichier LOG, dans le quel plusieurs thread écrivent des infos.
    Avec le temps et la quantité d'infos que je log, je n'ai jamais, mais alors jamais vu ce genre de chose.

    Je reste partagé sur la question...

    faut que je trouve le moyen de tester ça :
    si je créé 2 thread avec un threadAttendSignal(). et ils exécuteront la requête lorsque le signal arrive.
    Et que je déclenche le signal depuis un bouton.
    ça pourrait marcher non ?

  7. #7
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    Voici ce que je viens de tester :

    thread1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    PROCÉDURE Thread1()
     
    BOUCLE
     
    	ThreadAttendSignal(Infini)
    	HExécuteRequête(REQ_MaReq,hRequêteDéfaut,"valeur1")
    	HLitPremier(REQ_MaReq)
    	Trace("thread1", REQ_MaReq.MonArgument)
     
    FIN
    thread2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    PROCÉDURE Thread2()
     
    BOUCLE
     
    	ThreadAttendSignal(Infini)
    	HExécuteRequête(REQ_MaReq,hRequêteDéfaut,"valeur2")
    	HLitPremier(REQ_MaReq)
    	Trace("thread2", REQ_MaReq.MonArgument)
     
    FIN
    Lancement des threads :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ThreadExécute("thread1",threadNormal,Thread1)
    ThreadExécute("thread2",threadNormal,Thread2)
    bouton pour envoyer le signal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ThreadEnvoieSignal("thread1")
    ThreadEnvoieSignal("thread2")
    et bien j'ai bien ce j'attends, soit :

    thread1, valeur1
    thread2, valeur2
    et à chaque fois que je clique sur le bouton, aussi vite que je peux le faire.
    Des fois j'ai le thread2 qui fini avant le thread1 c'est tout.

    Ce que je ne comprends pas c'est que si je change la propriété "threadNormal" en "threadCopieLégère/ComplèteContextHfsql", ça change rien !!!???

Discussions similaires

  1. partager l'instance d'une classe entre plusieurs thread ?
    Par contremaitre dans le forum Threads & Processus
    Réponses: 5
    Dernier message: 29/07/2008, 11h53
  2. Réponses: 14
    Dernier message: 11/07/2008, 13h09
  3. partage d'une variable entre plusieurs threads
    Par baedal dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 27/02/2008, 20h33
  4. [Requête] Sommes entre plusieurs tables
    Par Ithilien dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 05/01/2007, 15h34
  5. Réponses: 6
    Dernier message: 09/11/2006, 10h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo