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 :

[VB.Net 2.0]Comment gérer multithreading sur des compteurs?


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2003
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 23
    Points : 15
    Points
    15
    Par défaut [VB.Net 2.0]Comment gérer multithreading sur des compteurs?
    Je débute en .Net et j'essaye de faire un truc qui pour certain sera très simple j'imagine
    voila j'implémente deux compteurs et je voudrais qu'à chaque itération, le 1er attende le second pour aller à l'itération suivante et vice versa

    voici mon code, qui ne fonctionne pas puique les deux compteurs tourne indépendamment l'un de l'autre
    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
     
     Private Sub compteur1()
            Dim i As Integer
            For i = 0 To 10
                msgbox(i.ToString)
     
            Next
        End Sub
     
        Private Sub compteur2()
            Dim i As Integer
            For i = 10 To 0 Step -1
                msgbox(i.ToString)
            Next
        End Sub
     
        Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton2.Click
            Dim th1 As Thread
            Dim th2 As Thread
            Control.CheckForIllegalCrossThreadCalls = False
            th1 = New Thread(AddressOf compteur1)
            th2 = New Thread(AddressOf compteur2)
            th1.Start()
            th2.Start()
       End Sub
    donc moi ce que je souhaite,c'est qu'il maffiche 0 puis 10 puis 1 puis 9 puis 2 puis 8 puis 3 puis 7 etc....

    si quelqu'un à une idéé merci d 'avance

  2. #2
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Salut

    Je suis gentil aujourd'hui
    @+

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    Imports System.Threading
     
    Public Class Form1
     
        Delegate Sub AfficheDansLstBoxDlg(ByVal i As Integer, ByVal compteur As String)
     
     
        Private ev1 As New ManualResetEvent(False)
        Private ev2 As New ManualResetEvent(False)
        Private AfficheDansLstboxDelegate As AfficheDansLstBoxDlg = New AfficheDansLstBoxDlg(AddressOf AfficheDansLstBox)
     
        Private Sub AfficheDansLstBox(ByVal i As Integer, ByVal compteur As String)
            ListBox1.Items.Add(String.Format("Valeur = {0}, Compteur = {1}", i, compteur))
        End Sub
     
        Private Sub compteur1()
            Dim i As Integer
            For i = 0 To 10
                'Attend tant que ev1 est set à false
                ev1.WaitOne()
                'Affiche sur listbox (Ne pas faire Listbox.add)
                Invoke(AfficheDansLstboxDelegate, New Object() {i, "Compteur1"})
                'Met ev2 à true
                ev2.Set()
     
            Next
        End Sub
     
        Private Sub compteur2()
            Dim i As Integer
            For i = 10 To 0 Step -1
                'Attend tant que ev2 est set à false
                ev2.WaitOne()
                'Affiche sur listbox (Ne pas faire Listbox.add)
                Invoke(AfficheDansLstboxDelegate, New Object() {i, "Compteur2"})
                'met ev1 à true
                ev1.Set()
            Next
        End Sub
     
        Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click
            Dim th1 As Thread
            Dim th2 As Thread
            'C pas bon ça :) Faut pas mettre ça en prod .... :)
            'Utilise Invoke pour les controles depuis les threads
            'Control.CheckForIllegalCrossThreadCalls = False
            th1 = New Thread(AddressOf compteur1)
            th2 = New Thread(AddressOf compteur2)
            th1.Start()
            th2.Start()
            ev1.Set()
        End Sub
    End Class

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2003
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    ok merci super sympa de ta part, merci également pour l'exemple de délégation, ca faisait parti de mes autres problèmes.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/03/2014, 22h22
  2. Réponses: 0
    Dernier message: 08/11/2013, 13h04
  3. Réponses: 3
    Dernier message: 05/06/2008, 17h30
  4. [ADO.Net][C#/Oracle]Comment gérer OracleType.VarChar?
    Par el_poitevin dans le forum Accès aux données
    Réponses: 5
    Dernier message: 30/03/2006, 14h08
  5. [.NET 2.0] Comment gérer correctement des sockets ?
    Par MattC dans le forum Framework .NET
    Réponses: 2
    Dernier message: 08/02/2006, 17h31

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