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 :

gestion des threads [WD15]


Sujet :

WinDev

  1. #1
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    Points : 77
    Points
    77
    Par défaut gestion des threads
    Bonjour,

    Je découvre WINDEV et j'ai besoin d'un coup de main au sujet des threads...

    Je veux lancer 3 threads chaque thread doit retourner le resultat du ping. Pour cela, j'ai crée un projet contenant une fenêtre avec 3 champs de saisie et 3 libelles et un bouton "lancement"

    Quand j'appuie sur le bouton, je lance les trois thread et j'attend que le resultat... Et la, cela mer... un peu !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //Le code dans le bouton de lancement ...
     
    ThreadMode(threadMultiProcesseur)
    ThreadExécute("T1", threadNormal, "TestRet2", SAI_IP1,1000,LIB_Resultat1)
    ThreadExécute("t2",threadNormal,TestRet2,SAI_IP2,1000,LIB_Resultat2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    PROCEDURE TestRet2(AdresseIP,tps,LeResultat)
    //message ("@IP : ",AdresseIP)
    //message("Tps : ",tps)
    SI Ping(AdresseIP,tps) ALORS
    	//RENVOYER "OK"
    	LeResultat="OK"
    	Erreur("Resultat : ",LeResultat)
    SINON
    	//RENVOYER "NOK"
    	LeResultat="NOK"
    	Erreur("Resultat : ",LeResultat)
    FIN
    Merci pour toute aide...

  2. #2
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    bonjour,

    il y a plusieurs choses qui ne vont pas dans ton code :

    1 - tu utilises la même procédure dans tes threads mais tu n'as pas mis l'option threadSectionCritique dans le Threadmode ( voir dans l'aide la différence entre threadAuto et threadSectionCritique)

    2 - dans le threadExécute tu passes en dernière valeur une chaîne pour le résultat du ping. Cela ne marchera pas car les paramètres dans un THreadExécute sont passés par valeur et pas par adresse donc pas possible de les modifier dans le thread. Il faudrait plutôt (pas le chien) utiliser des variables globales.

    3 - je ne sais pas exactement ce que tu veux faire :
    a - afficher le résultat des pings ?
    b - récupérer le résultat des pings dans des variables. Dans ce cas il va falloir savoir si les threads correspondant aux variables sont terminés avant d'exploiter leurs résultats.


    voici un exemple sans retour de résultat, avec affichage des résultats dans un Trace :

    1 - code du bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ThreadMode(threadMultiProcesseur + threadSectionCritique)
    ThreadExécute("T1", threadNormal, "TestPing", Sai_IP1,1000)
    ThreadExécute("T2",threadNormal,"TestPing",Sai_IP2,1000)
    ThreadExécute("T3", threadNormal, "TestPing", Sai_IP3,1000)
    2 - code de TestPing
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    PROCEDURE TestPing(AdresseIP,tps)
     
    SI Ping(AdresseIP,tps) ALORS
    	SectionCritiqueDébut()
    	Trace(AdresseIP + " : OK")
    	SectionCritiqueFin()
     
    SINON
    	SectionCritiqueDébut()
    	Trace(AdresseIP + " : NOK")
    	SectionCritiqueFin()
    FIN
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  3. #3
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Bonjour,

    cette fois-ci tu aurais dû signer J.F : jurassic fork

    @+

    Nicolas

  4. #4
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    Points : 77
    Points
    77
    Par défaut
    Tout d'abord, un grand merci pour ta réponse.

    Le but final est la surveillance de machines ayant une adresse IP. Donc, il faut que je puisse récupérer dans une variable le résultat du ping lui correspondant.

  5. #5
    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,

    Je pense que tu peux utiliser postmessage à la manière de l'exemple pour ouvrir une fenêtre dans un thread.

    Regarde l'aide de Thread, Ouvrir une fenêtre
    ainsi tu pourra te prévenir qu'il y a un pb sur un ping.
    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

  6. #6
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    Points : 77
    Points
    77
    Par défaut
    Je n'arrive pas a te suivre ...

  7. #7
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    Points : 77
    Points
    77
    Par défaut
    Bonjour,

    Je ne sais pas comment je peux récupérer la valeur de retour d'un ping.
    C'est un grand moment de solitude qui me guette !

    Je suis sec.... Voir même dessécher !

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 47
    Points : 56
    Points
    56
    Par défaut
    Tu dois créer un tableau de booléen variables globales.

    Chaque Adresse IP à surveiller étant une ligne de ton tableau.

    taListeIP est un tableau associatif de booleen

    Ensuite dans chacun des thread du remplit

    taListeIP[sAdresseIP]=Vrai

  9. #9
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    et voici un exemple en utilisant des variables globales

    1 - Définition d'un tableau d'entiers dans les déclarations globales de la fenêtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // Déclarations globales FEN_Test
    ResultPing est un tableau de 3 entiers
    // valeur 0 test en cours  valeur 1 OK valeur 2 NOK
    2 - code du bouton de test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    POUR TOUT UnElément DE  ResultPing
    UnElément = 0  // 0 test en cours	
    FIN
     
    ThreadMode(threadMultiProcesseur + threadSectionCritique)
    ThreadExécute("T1", threadNormal, "TestPing", Sai_IP1,1000,1)
    ThreadExécute("T2",threadNormal,"TestPing",Sai_IP2,1000,2)
    ThreadExécute("T3", threadNormal, "TestPing", Sai_IP3,1000,3)
    3 - code de la procédure TestPing
    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
     
    PROCEDURE TestPing(AdresseIP,tps,Lenuméro)
    //message ("@IP : ",AdresseIP)
    //message("Tps : ",tps)
    SI Ping(AdresseIP,tps) ALORS
    	//RENVOYER "OK"
    	SectionCritiqueDébut()
    //	Trace(AdresseIP + " OK")
    	ResultPing[Lenuméro]=1  // 1 Résultat OK 
    	SectionCritiqueFin()
     
    SINON
    	SectionCritiqueDébut()
    //	Trace(AdresseIP + " NOK")
    	ResultPing[Lenuméro]=2  // 2 Résultat NOK 
    	SectionCritiqueFin()
    FIN
    y a plus qu' à attendre que les variables résultats soient à 1 ou 2


    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  10. #10
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    Points : 77
    Points
    77
    Par défaut
    Super, j’étais en train d'explorer cette piste.
    Mille fois merci.

    A+ LB

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

Discussions similaires

  1. gestion des threads
    Par yanis97 dans le forum Langage
    Réponses: 6
    Dernier message: 20/04/2006, 12h41
  2. Gestion des Threads
    Par Nalfouille dans le forum MFC
    Réponses: 3
    Dernier message: 05/04/2006, 16h29
  3. Gestion des threads
    Par yanis97 dans le forum C++
    Réponses: 6
    Dernier message: 08/03/2006, 09h39
  4. GEstion des thread
    Par Julien Dufour dans le forum Access
    Réponses: 8
    Dernier message: 06/10/2004, 14h28
  5. [reseaux] Gestion des threads en perl
    Par totox17 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 28/11/2002, 09h40

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