Multi threading

Résolu
cs_JuVeNaL Messages postés 8 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 27 février 2012 - 24 févr. 2012 à 13:12
cs_JuVeNaL Messages postés 8 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 27 février 2012 - 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

9 réponses

Utilisateur anonyme
24 févr. 2012 à 13:49
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
3
cs_JuVeNaL Messages postés 8 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 27 février 2012
24 févr. 2012 à 15:00
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
0
Utilisateur anonyme
24 févr. 2012 à 15:09
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
0
cs_JuVeNaL Messages postés 8 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 27 février 2012
24 févr. 2012 à 15:47
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
24 févr. 2012 à 15:53
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
0
cs_JuVeNaL Messages postés 8 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 27 février 2012
24 févr. 2012 à 16:00
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
0
Utilisateur anonyme
24 févr. 2012 à 16:04
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
0
Utilisateur anonyme
24 févr. 2012 à 18:28
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
0
cs_JuVeNaL Messages postés 8 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 27 février 2012
27 févr. 2012 à 13:15
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
0
Rejoignez-nous