Multi threading [Résolu]

cs_JuVeNaL 8 Messages postés mardi 8 mars 2005Date d'inscription 27 février 2012 Dernière intervention - 24 févr. 2012 à 13:12 - Dernière réponse : cs_JuVeNaL 8 Messages postés mardi 8 mars 2005Date d'inscription 27 février 2012 Dernière intervention
- 27 févr. 2012 à 13:15
Chers tous,

Je bloque sur un problème avec le multithreading.

J'ai créer un sub ou je passe en arguments des données que je peche dans une DB .
Jusque la pas de problème

Sub test(ByVal dom_var As String, ByVal usr_var As String)
.............
end sub

vu le nombres de a traiter je souhaite jouer avec le multithreading

thread = New System.Threading.Thread(AddressOf test(domaine,usr))
thread.Start()

mais évidement il refuse car il me dit L'opérande 'AddressOf' doit être le nom d'une méthode (sans parenthèses).


Etant débutant, quelqu'un peut-il m'expliquer comment faire ?

Je vous remercie d'avance.

Bien à vous
JuVeNaL
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Utilisateur anonyme - 24 févr. 2012 à 13:49
3
Merci
Cher tout seul,

As-tu essayé de le faire dans ce sens:
  
Dim t As New System.Threading.Thread(AddressOf test)
t.Start()
Sub test()
    Dim domaine As String = "xxxx"
    Dim usr As String = "yyyy"
    'Tout dépend de comment tu charges tes variables
    '............. 
End Sub


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique

Merci Utilisateur anonyme 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 75 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
cs_JuVeNaL 8 Messages postés mardi 8 mars 2005Date d'inscription 27 février 2012 Dernière intervention - 24 févr. 2012 à 15:00
0
Merci
Ma variable et déclarer dans la boucle ou je fait appel au thread ... donc impossible de faire ainsi malheureusement ....

une autre idée :-(

Encore merci pour l'idée .

Bien à toi
JuVeNaL
Commenter la réponse de cs_JuVeNaL
Utilisateur anonyme - 24 févr. 2012 à 15:09
0
Merci
Eh bien...
une autre possibilité:
Public Class Form1
'déclaration publique des variables
    Public domaine As String
    Public usr As String

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        for ...
            domaine= ValeurDomaineDeTaBDD
            usr = ValeurUsrDeTaBDD
            Dim t As New System.Threading.Thread(AddressOf test)
            t.Start()
        Next
    End Sub
 
    Sub test()
        'utilisation de domaine et usr...
        '............. 
    End Sub
End Class



Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Commenter la réponse de Utilisateur anonyme
cs_JuVeNaL 8 Messages postés mardi 8 mars 2005Date d'inscription 27 février 2012 Dernière intervention - 24 févr. 2012 à 15:47
0
Merci
Effectivement ....... .. bah j'avoue que la j'ai vraiment l'aire d'un con .......

Merci pour l'info et je confirme que ça marche ... bon le problème c'est qu'avec 1700 variables il me lance 1700 thread et la ça fait mal ... je vais voir comment optimaliser ça ... si vous avez une idée je suis preneur ...

C'est pour faire tu monitoring en temps réel .....

Bien à toi
JuVeNaL
Commenter la réponse de cs_JuVeNaL
Utilisateur anonyme - 24 févr. 2012 à 15:53
0
Merci
1700 thread et la ça fait mal

Tout dépend du traitement que tu fais dans la sub test...

j'ai vraiment l'aire d'un con

Nous somme tous passé par la
Quand on fait 50 lignes de code qui fonctionne mal et qu'un jour un gars se pointe et te le fait correctement en 4 mots... ça arrive!...

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Commenter la réponse de Utilisateur anonyme
cs_JuVeNaL 8 Messages postés mardi 8 mars 2005Date d'inscription 27 février 2012 Dernière intervention - 24 févr. 2012 à 16:00
0
Merci
Dans les 1700 threads je vais consulter l'AD pour chercher des informations utilisateurs et groups que j'écrit dans une DB pour completer les informations pour une application web ...

mais le but c'est aussi de faire tourner ça sur un serveur .. et j'ai un peu peur que le serveur de production plante avec la chanrge CPU .....

Bien à toi
JuVeNaL
Commenter la réponse de cs_JuVeNaL
Utilisateur anonyme - 24 févr. 2012 à 16:04
0
Merci
1700 ce n'est pas énorme, bon, tout dépend du temps de traitement... il te faudra éventuellement utiliser des Application.DoEvents pour libérer un peu.



Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 24 févr. 2012 à 18:28
0
Merci
Bonsoir,

A signaler quand même qu'il existe une surcharge de la méthode Start qui te permets de passer un objet (une classe par exemple) à ton thread.
Le passage d'un objet à un thread permet par exemple d'utiliser la même sub en lui fournissant des données d'entrées différentes.
Un petit exemple simpliste pour montrer le fonctionnement :
Option Strict On
Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim user As String() = {"titi", "tata", "toto"}
        Dim pass As String() = {"lili", "lala", "lolo"}
        For i As Integer = 0 To 2
            Dim t As New System.Threading.Thread(AddressOf test)
            t.Start(New clsLogin(i, user(i), pass(i)))
        Next
    End Sub

    Sub test(ByVal params As Object)
        Dim Login As clsLogin = DirectCast(params, clsLogin)
        MessageBox.Show("thread #" & Login.NumeroThread.ToString & Environment.NewLine & _
                        "user= " & Login.User & Environment.NewLine & _
                        "pass= " & Login.Pass)
    End Sub
End Class

Public Class clsLogin
    Dim _numerothread As Integer,_user, _pass As String

    Sub New(ByVal NumeroThread As Integer, ByVal User As String, ByVal Pass As String)
        _numerothread = NumeroThread
        _user = User
        _pass = Pass
    End Sub
    ReadOnly Property NumeroThread As Integer
        Get
            Return _numerothread
        End Get
    End Property
    ReadOnly Property User As String
        Get
            Return _user
        End Get
    End Property
    ReadOnly Property Pass As String
        Get
            Return _pass
        End Get
    End Property
End Class
Commenter la réponse de Utilisateur anonyme
cs_JuVeNaL 8 Messages postés mardi 8 mars 2005Date d'inscription 27 février 2012 Dernière intervention - 27 févr. 2012 à 13:15
0
Merci
Bonjour,

j'ai enfin sur faire fonctionner mon multithread ...
Mais je rencontre un petite problème , chaque thread écrit quelque chose dans une DB , pour l'instant il génère 1700 Threads.
Mais je constate qu'il ne termine que +/- 90 thread voir parfois moins ... hors si je lui met un sleep de 1000 il arrive a les terminer mais c'est beaucoup trop lent . quelqu'un sais il me dire pourquoi ? ou m'éguiller ?

Bien à vous
JuVeNaL
Commenter la réponse de cs_JuVeNaL

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.