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

VB.NET Discussion :

Multiples threads vb.net


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Multiples threads vb.net
    Bonjour,

    Je souheterais débuter dans l'utilisation de threads.

    J'ai 5 listes : une liste de référence et 4 autre.
    Je remplis les listes de la façon suivante :
    Liste de référence : intérrogation du répertoire sur un serveur
    4 autres listes : idem mais pour autre serveurs.

    Résultat : afficher dans 4 listbox les dossiers ne se trouvant pas sur les autres serveurs par rapport au serveur de référence.

    Principe :
    - lancer 5 thread (T1, T2, T3, T4, T5) récupérant les dossiers dans 5 arraylist.
    - comparer la liste de référence et chaque liste
    - afficher la différence.

    Je dois cependant attendre que T1 et T2 soit fini pour effectuer la première comparaisson. Ensuite T1 et T3 pour la deuxième, T1 et T4, etc....

    Comment procéder ?

    Merci beaucoup.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 374
    Points : 451
    Points
    451
    Par défaut
    bonjour,
    Il faut lancer les thread 1 à 1
    C'est à dire
    1 lancer le thread T1
    2 lorsque il est fini( événement runworkercompleted si tu utlises un backgroundworker)
    3 lancer le T2 et ainsi de suite...
    Bon boulot
    Jean

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Bonjour Jean,

    Merci pour tes réponses mais pratiquement comment je fais ???
    Comment je lance T1 ?
    Comment je checke si T1 est fini pour lancer T2, T3, T4, T5 ?
    Comment je checke T2 pour lancer la première comparaisson et ainsi de suite ?

    Merci beaucoup

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 374
    Points : 451
    Points
    451
    Par défaut
    Bonjour,
    Pour traiter les thread j'utilise un backgroundworker
    Il y a d'ailleurs un tutoriel http://glarde.developpez.com/dotnet/bgworker/
    C'est avec ce tutoriel que j'ai créé mes premiers threads.
    Tout y est expliqué, mais si tu veux d'autres exemples, je peux t'envoyer mon code.
    Bon boulot
    Jean

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Bonjour Jean,

    Merci pour ta réponse rapide, mais je développe dans le framework 1.1
    As-tu des exemples en 1.1 par rapport à ma demande ?

    Encore merci

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 66
    Points : 80
    Points
    80
    Par défaut
    Tu peux utiliser la méthode Join() de la classe Thread qui permet de savoir quand un thread à terminé son exécution : http://msdn2.microsoft.com/en-us/lib...68(VS.71).aspx .

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    As-tu un exemple pour lancer 5 threads ?
    Les threads doivent exécuter une fonction avec paramètres d'entrées et un paramètre de retour qui rempli un tableau (retour), donc typiquement une fonction.

    Merci

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 374
    Points : 451
    Points
    451
    Par défaut
    Bonjour,
    désolé mais en 1.1 je n'ai jamais utilisé de threads
    Bon boulot
    Jean

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 68
    Points : 80
    Points
    80
    Par défaut
    je ne sais pas ce que tu entends par paramètre de retour, mais généralement le principe des threads c'est justement que l'appelant n'attends pas le retour de la fonction, et continue ses affaires...

    Autrement des bouts de code :

    en .NET 1.1, lancement de base d'un thread (mais vraiment de base) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    System.Threading.ThreadStart oTs = new System.Threading.ThreadStart(taFonction);
    System.Threading.Thread T1 = new System.Threading.Thread(oTs);
    T1.Start();
    Appel asynchrone avec des delegates pour récupérer les valeurs de retour et passer des paramètres, ce qui correspondrait bien à ton problème je pense...

    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
     
    tFonction1 T1 = new tFonction1(laVraieFonctionT1);
    IAsyncResult oResultDyn = T1.BeginInvoke("parametre", null, null);
    //Traitement....
     
    //Attente du résultat et récupération de la valeur de retour
    if(oResultDyn.AsyncWaitHandle.WaitOne())
       monResulat = T1.EndInvoke(oResultDyn);
     
     
    //DECLARATION DU DELEGATE
    private delegate String tFonction1(String parametre);
     
    //DECLARATION DE TA FONCTION
    private String laVraieFonctionT1(String parametre)
    {
     return "youhou";
    }
    Enfin bon si j'ai bien compris ton problème...

    [edit]
    par contre c'est à traduire en VB.NET, désolé j'avais vu que c'était du VB
    [/edit]

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Bonjour SuperB,

    Je reclarifie le problème :

    Je déclare 5 tableaux dans mon formulaire en variables :
    Dim aList1 as string()
    Dim aList2 as string() ...

    J'ai une fonction qui remplit ces tableaux et donc qui redimensionne ces tableaux puisque je ne connais pas à l'avance la longueur.

    J'appelle 5 x cette fonction avec un paramètre (chemin d'interrogation) :
    une fois pour remplir la liste de référence aList1 puis quatre fois pour remplir les listes à checker.

    Ensuite, j'appelle 4 x une autre fonction avec paramètre : elle vérifie la présence d'un item d'une liste par rapport à la liste de référence. Si l'item est absent dans la liste de référence, il est ajouté dans une listview..

    Pour l'instant, tout est séquentiel, je voudrais afin d'optimiser mon formulaire faire du multi-thread :
    - lancer le premier appel de la fonction pour avoir la liste de référence
    - une fois le premier appel terminé, je lances les quatre autres appels
    - une fois chaque appel terminé, je lance la fonction de vérification entre les listes.

    Je crois que cela est peut-être un peu plus clair.
    Il y a peut-être une autre manière par rapport aux tableaux ou une méthode plus adaptée...

    Merci beaucoup

Discussions similaires

  1. Connexion SSL multiple - Librairie SSH-net/Multi
    Par Invité dans le forum Ruby
    Réponses: 2
    Dernier message: 18/01/2015, 12h16
  2. Héritage multiple en VB.Net
    Par tonnebrre dans le forum VB.NET
    Réponses: 5
    Dernier message: 17/01/2011, 18h31
  3. enregistrements multiples avec vb net
    Par soniadn dans le forum VB.NET
    Réponses: 1
    Dernier message: 14/07/2009, 23h03
  4. Multiple thread peuvent ils bloquer (EDT) malgre invokeLater
    Par murgen23 dans le forum EDT/SwingWorker
    Réponses: 3
    Dernier message: 12/09/2008, 07h56
  5. Réponses: 2
    Dernier message: 28/03/2007, 15h03

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