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

Windows Forms Discussion :

Lancer plusieur thread sur la meme fonction


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 63
    Par défaut Lancer plusieur thread sur la meme fonction
    Bonjour ,je me suis recement mis aux threads pour cause de gele d'interface dans 2 programme distinct qui concerne le mailling et telechargement ftp.

    J'ai donc reussi a faire un thread avec passage de parametre en vb.net,bizarrement j'ai trouver la solution dans la faq asp.net.

    Enfin bref moi je voudrais puvoir lancer jusqua 20 thread sur ma fonction mailling,comment faire ? voici un exemple du code que j'utilise
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    Public Class ThreadParametre
    Private _text As String
     
     
    Public Sub New(ByVal texte As String)
    _text = texte
    End Sub
     
    Public Sub ExecuteThread()
    mon code d'envoi d'email ou mon code de telechargement de fichier ftp
    End Sub
    End Class 
     
     
     
    Public Class Exemple
     
    Public Shared Sub Main()
    Dim ExempleThread As ThreadParametre = New ThreadParametre(Adresse)
    Dim t As Thread = New Thread(New ThreadStart(addresOf ExempleThread.ExecuteThread))
    t.Start
    End Sub
     
    private sub envoiMail ()
     
    While not eof....
     
    J'appelle mon thread
    Main(Adresse)
     
    wend
    end sub
    voila si vous poouviez m'aider a lancer plusieur thread du meme programme ca serais gentil

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    ben il suffit de faire comme quand tu lances un seul thread, mais plusieurs fois... tu peux éventuellement mettre les threads créés dans une liste pour les garder sous la main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim threads As New List(Of Thread)
    Dim t As Thread
    Dim ExempleThread As ThreadParametre
    For Each address As String In addresses
        ThreadParametre = New ThreadParametre(Adresse)
        t = New Thread(New ThreadStart(addresOf ExempleThread.ExecuteThread))
        threads.Add(t)
        t.Start
    Next address

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 63
    Par défaut Re:treads
    Merci pour ta reponse,

    Je n'est pas essayer ta solution,mais je sens que mon appli vas vite geler si je trouve pas un moyen de limiter les threads,il me faudtrais donc un moyen de recupere le nombre de threads actifs pour pouvoir y mettre une condition a cette boucle,ou alors je mets un thread.sleep(300) dans mon appel en boucle pour eviter la debordage qu'en pensez vous?

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    lu en diagonale

    une autre possibilité serais un thread de gestion des choses à faire (sur le thread d'ui)
    un thread de gestion des thread à démarrer (ce thread dans un while true pour qu'il continue toujours)
    une list(of thread)
    un queue(of chose à faire)


    si thread d'ui vois qqch à faire, il le rajoute dans queue

    si thread de démarrage des thread voit qqch dans la queue, il regarde si un des thread de la list est pas alive, au quel cas il crée un new thread et le range dans la list
    si tout le monde est alive (en train de marcher) ou que rien dans queue, alors thread.sleep (200) puis while end

    et donc tu te retrouves avec un nombre de thread limité et un thread qui s'occupe de démarrer ce nombre de thread dès qu'il y a de la place (et qqch à faire)

    je peux expliciter un peu plus si y faut
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par sperot51 Voir le message
    lu en diagonale

    une autre possibilité serais un thread de gestion des choses à faire (sur le thread d'ui)
    un thread de gestion des thread à démarrer (ce thread dans un while true pour qu'il continue toujours)
    une list(of thread)
    un queue(of chose à faire)


    si thread d'ui vois qqch à faire, il le rajoute dans queue

    si thread de démarrage des thread voit qqch dans la queue, il regarde si un des thread de la list est pas alive, au quel cas il crée un new thread et le range dans la list
    si tout le monde est alive (en train de marcher) ou que rien dans queue, alors thread.sleep (200) puis while end

    et donc tu te retrouves avec un nombre de thread limité et un thread qui s'occupe de démarrer ce nombre de thread dès qu'il y a de la place (et qqch à faire)

    je peux expliciter un peu plus si y faut
    c'est sans doute la meilleure méthode en effet, mais pas la peine de réinventer la roue: c'est exactement ce que fait la classe ThreadPool

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    ah oui, connaissais pas ^^
    comme souvent en .NET y a une classe qui fait ce qu'on veut faire
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Plusieurs thread et une meme fonction
    Par azmimik dans le forum Général Python
    Réponses: 2
    Dernier message: 03/08/2007, 23h32
  2. [MySQL] Plusieurs jointures sur une même table
    Par stephyyr dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/06/2006, 14h24
  3. debutant lecture de plusieur variable sur une meme ligne
    Par Slumpy dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 16/06/2006, 19h37
  4. Plusieurs jointures sur la meme table [complexe]
    Par Wells dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/06/2006, 11h41
  5. plusieurs sessions sur un même PC
    Par mouloudéen dans le forum Windows XP
    Réponses: 9
    Dernier message: 02/06/2006, 11h11

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