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 :

Info sur l'utilisation de thread [Généralités]


Sujet :

WinDev

  1. #1
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 801
    Points
    3 801
    Par défaut Info sur l'utilisation de thread
    Bonjour,

    Voilà je commence à me pencher sur l'utilisation des threads et j'ai besoin de vos expériences..

    Je voulais savoir si il étais possible, d'une façon ou d'une autre d'avoir une valeur de retour lors de l'utilisation d'un thread.

    En gros je veux utiliser les threads pour lancer plusieurs procédures en même temps (jusque là rien de bizarre vu que ça sert à ça) et j'ai besoin d'avoir une valeur de retour, soit une classe, soit une structure, soit une variables.
    Lorsque j'utilise mes procédures dans le thread principale tout marche normalement, mais avec les threads mon programme va aller bcp plus vite.

    J'ai bien penser à déclarer des variables globales au projet, mais je ne trouve pas ça très propre comme développement. (Enfin c'est mon avis, avoir des variables qui traine à droite et à gauche alors que j'en ai besoin qu'à un ou deux endroits).

    Si vous avez déjà rencontrer ce besoin je vous remercie de partager votre expérience.

  2. #2
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 801
    Points
    3 801
    Par défaut
    Merci TATAYO pour ton idée je vais essayé

    En gros voici ce que j'ai compris
    ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Valeur_Retour est tableau dynamique de chaine
    Ainsi j'ai juste à créer une ligne dans mon tableu et la passer en paramètre dans mon thread

    Comme ça mon thread sait quelle variable il faut mettre à jour.

    Je vais tester tout ça.
    Je veux également savoir si je peux utiliser des alias, ce qui rendra mes variables plus compréhensible (Retour_Thread_Num_x est plus clair que Valeur_Retour[i])

    C'est juste ta partie sur "la section critique" que je n'ai pas trop compris.
    Si je passe le nom de la variables de retour en paramètre dans mon thread, je n'ai pas besoin de la section critique ??

    Et je vous tient au courant de mes recherches

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 278
    Points : 12 965
    Points
    12 965
    Par défaut
    Citation Envoyé par mail.spam Voir le message
    Merci TATAYO pour ton idée je vais essayé

    Je veux également savoir si je peux utiliser des alias, ce qui rendra mes variables plus compréhensible (Retour_Thread_Num_x est plus clair que Valeur_Retour[i])

    C'est juste ta partie sur "la section critique" que je n'ai pas trop compris.
    Si je passe le nom de la variables de retour en paramètre dans mon thread, je n'ai pas besoin de la section critique ??

    Et je vous tient au courant de mes recherches
    En fait je ne pensais pas passer la ligne du tableau en paramètre, mais encapsuler le tout dans une classe, avec des méthodes d'accès en lecture et écriture sur le tableau (déclaré privé dans la classe). Chaque thread accède au tableau au travers de ces méthodes d'accès. Il faut donc une section critique pour l'écriture dans le tableau, puisque 2 threads peuvent tenter d'écrire simultanément dans le tableau. L'avantage est que toute la partie "gestion" du tableau (redimensionnement, affectationest dans la classe, le reste du code n'a pas à s''en occuper.
    Voilà en détail mon idée (qui n'est pas forcément la meilleure):
    Tu crées un objet global GestionThread
    Tu lances tes threads
    A la fin de chaque threads, ceux-ci appellent GestionThread:SetValeurRetour(NumeroTthread,ValeurRetour) qui peux ressembler à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Procédure SetValeurRetour(NumeroThread est un entier,ValeurRetour est une chaine)
    SectionCritiqueDébut()
    SI dimension(:TabValeurRetour) < NumeroThread ALORS
        dimension(:TabValeurRetour,NumeroThread)
    FIN
    :TabValeurRetour[NumeroThread] = ValeurRetour
    SectionCritiqueFin()
    FIN
    Le thread principal interroge GestionThread(NumeroThread) pour avoir la valeur de retour.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Procédure GetValeurRetour(NumeroThread est un entier)
    ValeurRetour est une chaine
    SI dimension(:TabValeurRetour) < NumeroThread ALORS
        ValeurRetour = ""
    SINON
        ValeurRetour = :TabValeurRetour(NumeroThread)
    FIN
    L'avantage est que tu peux gérer sans modification un nombre indéterminé de thread, et que le thread principal peut interroger le tableau des valeurs de retour "sans trop se poser de question".

    Si tu passes par un tableau global, il faut soit le dimensionner à priori, soit vérifier si tu peux le redimensionner pendant qu'un thread modifie une ligne.

    Pour l'alias je ne comprends pas trop. Tu as d'un côté un tableau de chaine, et de l'autre un alias. Mais un alias de quoi ? L'aide en ligne ne parle pas d'alias de variable, et utiliser Valeur_Retour_Thread_X au lieu de Valeur_Retour_Thread[X] ne change pas grand chose en lisibilité.

    Tatayo.

  4. #4
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 801
    Points
    3 801
    Par défaut
    Ok je comprend un peu mieux,

    Même si je ne vois pas tout ce que je dois faire..
    (Aujourd'hui, j'ai du oublié de prendre mon cerveau).

    En gros je crée une classe qui s'appelle C_GestionThread
    qui se compose de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    C_GestionThread est une classe
            TabValeurRetour est tableau de chaine
    FIN
    et je crée deux méthode qui sont celles que tu m'as mis en exemple

    Ensuite je déclare dans l'initialisation de mon projet un objet Gestion thread

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GestionThread est un objet C_GestionThread
    C'est bien ça ??

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 278
    Points : 12 965
    Points
    12 965
    Par défaut
    Tout à fait, mais pour faire le puriste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    C_GestionThread est une classe
        PRIVE
            TabValeurRetour est tableau dynamique de chaine
    FIN
    La propriété étant privée, tu es certain qu'elle n'est accédée que via les méthodes de la classe.

    Tatayo.

  6. #6
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 801
    Points
    3 801
    Par défaut
    Encore Merci TATAYO.
    C'est ce que je cherchais, je vais creuser un peu plus avec l'utilisation d'une variable VARIANT, ce qui gèrerai mes différents cas de retour, surtout qu'en W14 on peut utiliser un variant pour je cite

    Le type Variant permet de :

    stocker n'importe quelle valeur de type simple : booléen, numérique (Monétaire, réel sur 8 octets, Entier signé sur 4 octets), caractères et chaîne de caractères, date (Date, Heure, DateHeure et Durée).

    stocker des valeurs correspondant à des types avancés (variables de type gglxxx, xlsxx, rssxxx).

    stocker des classes.

    stocker des interactions avec les objets ActiveX et la programmation Automation.

    manipuler la valeur NULL dans le WLangage.
    Ce qui va me permettre de gérer 90% de mes cas, les 10% restant sont des structures. J'ai plus qu'à les déclarer dans des classes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Explication sur l'utilisation de Thread
    Par pHlegMatikangel dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 23/11/2008, 09h01
  2. Besoin d'infos sur fonction utilisant des lookup table
    Par Phelix2003 dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 24/10/2008, 11h07
  3. Avis sur la bonne utilisation des Threads
    Par Pitivier dans le forum Général Java
    Réponses: 8
    Dernier message: 28/11/2006, 20h07
  4. Complément d'info sur l'utilisation de settimeout
    Par WhyMee dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/08/2006, 13h08
  5. [CR] Infos sur l'utilisation de dll
    Par step dans le forum SAP Crystal Reports
    Réponses: 11
    Dernier message: 09/08/2002, 11h35

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