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 :

Nom Thread qui lance procédure [WD14]


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 : 45
    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 803
    Points
    3 803
    Par défaut Nom Thread qui lance procédure
    Bonjour,

    Je commence à me fammilliariser avec les threads et leurs utilisation.
    (c'est quand même super pratique ces petites choses là)
    Et je voulais savoir s'il existait un moyen de connaitre le nom du thread qui lance la procédure.

    ce qui me permet de faire la différence lorsque je lance ma procédure dans le thread principale ou dans un thread secondaire.

    Je vous remercie d'avance
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  2. #2
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Bonjour
    Je ne crois pas
    Mais tu peux faire l'inverse : avec ThreadEtat, savoir si un thread dont on connait le nom est lancé.
    Si c'est le cas c'est que ta procédure est exécutée dans un thread secondaire

    Si tu as plusieurs threads en cours tu peux les mémoriser dans un tableau et les tester tous avec ThreadEtat par exemple

  3. #3
    Membre éclairé Avatar de Raptor92
    Homme Profil pro
    Directeur des opérations & Innovation
    Inscrit en
    Juin 2009
    Messages
    953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur des opérations & Innovation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 953
    Points : 766
    Points
    766
    Par défaut
    Bonjour mail.Spam,

    En complément avec ce que dit Hpascal, lorsque j'ai commencer à comprendre les threads, je me suis basé en autre sur l'exemple WD Pool de threads.

    Tu a un exemple dedans qui devrait s'approcher de ce que tu souhaites (je pense)

    Tu peut lister tes threads et savoir l'état dans lequel ils se trouvent.

    A voir
    Bonne après midi
    Raptor92
    Dominique
    Aucune aide par MP, utilisez le forum.

    Mon guide du débutant pour apprendre à programmer en Java - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java


  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 : 45
    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 803
    Points
    3 803
    Par défaut
    Bonjour,
    l'exemple WD Pool de threads ne permet pas de savoir si la procédure est lancé à partir d'un thread secondaire ou principale.
    J'ai résolu mon problème en ajoutant à ma procédure un paramètre optionnel.

    Concraitement je lance plusieurs thread et je garde dans un tableau la liste des threads que je lance, ainsi en fin de traitement je peux vérifier si tous mes threads sont fini.

    voici un exemple de ce que je fais.

    code de ma procédure qui peux être lancer directement ou par thread
    (j'utilise une collection de procédure perso qui me sert pour tous mes projets et c'est pour ça que des fois je passe par des threads)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    PROCEDURE MailErreur(MessageErreur est une chaîne,NomThread est chaîne = "")
     
    //
    //		initialisation structure du mail
    //
    SectionCritiqueDébut()
    Email.Expéditeur = Destinataire.AdresseMail
    Email.AdresseExpéditeur = Destinataire.AdresseMail
    Email.NbDestinataire = 1
    Email.Destinataire = Destinataire.AdresseMail
    Email.Sujet = "Retour Erreur Programme : " + fExtraitChemin(ExeInfo(exeNom), fFichier + fExtension)
    Email.Message = MessageErreur
    EmailOuvreSessionSMTP(Destinataire.LoginSmtp,Destinataire.PasswordSmtp, Destinataire.ServeurSmtp)
    EmailEnvoieMessage(Destinataire.LoginSmtp)
    SI NomThread <> "" ALORS
    	//recherche de la ligne dans listeThreadPerso du thread
    	TableauSupprime(ListeThreadPerso,TableauCherche(ListeThreadPerso,tcLinéairePremier,NomThread))
    FIN
    SectionCritiqueFin()
    et voici le code qui lance le thread

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    PROCEDURE ThreadMailErreur(Val_MessageErreur est une chaîne)
     
    NomThread est chaîne = "MailErreur" + HeureVersChaîne(HeureSys,"HHMMSSCC")
    TableauAjouteLigne (ListeThreadPerso,NomThread)
    ThreadMode(threadSectionCritique)
    ThreadExécute(NomThread,threadNormal,MailErreur,Val_MessageErreur,NomThread)
    ainsi quand je contrôle la présence de thread en fin de programme par exemple voici ce que j'utilise

    procédure de contrôle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    PROCEDURE ThreadPersoTerminé()
     
    //trace("nbthread = " + TableauOccurrence(ListeThreadPerso))
     
    POUR TOUT ELEMENT unThread DE ListeThreadPerso
    	SI ThreadEtat(unthread) = threadEnCours ALORS
    		RENVOYER Faux
    	FIN
    FIN
    RENVOYER Vrai
    Code de fermeture du projet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TANTQUE PAS ThreadPersoTerminé() 
    	Temporisation(100)
    FIN
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2002
    Messages : 899
    Points : 1 100
    Points
    1 100
    Par défaut
    Heu, juste, tu as regardé du coté de la fonction dbgInfo(dbgTraitement, dbgTraitementAppelant) ?

  6. #6
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juin 2008
    Messages : 122
    Points : 124
    Points
    124
    Par défaut
    Bonjour,

    C'est moins rigoureux que la proposition de Bowen mais pourquoi pas un simple argument (booléen vrai par défaut (thread princ.), faux si thread secondaire)?

    N_Ron.

  7. #7
    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 : 45
    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 803
    Points
    3 803
    Par défaut
    Citation Envoyé par Bowen Voir le message
    Heu, juste, tu as regardé du coté de la fonction dbgInfo(dbgTraitement, dbgTraitementAppelant) ?
    Oui j'avais déjà vérifié mais lors de l'utilisation de thread il n'y as pas d'information sur TraitementAppelant.

    Sinon N_Ron je préfère avoir le numéro du thread appelant car je gère aussi des valeurs de retour et pour les différencier j'ai besoin du nom du thread
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

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

Discussions similaires

  1. Connaitre utilisateur qui lance procédure
    Par meloo dans le forum PL/SQL
    Réponses: 3
    Dernier message: 18/03/2009, 15h51
  2. Thread qui ne se lance pas
    Par barbiche dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 20/03/2007, 16h06
  3. Réponses: 6
    Dernier message: 11/05/2006, 16h00
  4. Réponses: 11
    Dernier message: 20/12/2005, 18h40

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