Vitesse d'execution [Résolu]

Messages postés
3
Date d'inscription
dimanche 23 juillet 2006
Dernière intervention
8 septembre 2006
- - Dernière réponse : cs_Willi
Messages postés
2382
Date d'inscription
jeudi 12 juillet 2001
Dernière intervention
15 décembre 2018
- 8 sept. 2006 à 21:12
Bonjour à tous !


J’essaye d’apprendre à programmer en utilisant Visual Basic 2005 par mes propres moyens à l’aide de livres consacrés à ce langage .


Etant donné mon niveau de débutant absolu, c’est de galères en bidouilles que j’arrive plus ou moins à obtenir ce que je veux.


Pour le moment, j’ai réussi à créer un programme qui envoie des « Ping » aux adresses IP comprises dans un intervalle saisis par l’utilisateur.


Le problème, c’est que mon modeste programme met 6 minutes complètes pour scanner 255 adresses.


Y aurait-il un moyen de réduire cette durée ?


Est-ce que les « Thread » ont quelque chose a voir avec mon problème !?


Sinon, c’est quoi un « thread » ?


Merci d’avance à ceux qui réfléchiront à mon problème.


 <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
3
Merci
salut,
NB : je ne touche pas à DotNet

le ping par lui-même prend déjà un certain temps.
par contre ouai... je suppose qu'il est possible de faire tourner les 255 requêtes (on va dire çà comme çà) en même temps, donc avec 255 threads.
à savoir que je n'ai aucune idée s'il est possible d'en lancer tant à la fois.

un thread... c'est le fait de pouvoir faire tourner un morceau de ton appli (une procédure) en même temps que le reste.
en VB6 on ne peut pas (ou presque).

exemple :

Private Sub Form_Load()    
    Me.Show
    Call Proc1 
    Call Proc2 
End Sub 
'
Sub Proc1() 
    Dim i As Long 

    For i =  0 To 150000 
        DoEvents 
        Me.Caption = "compteur = " & i 
    Next i 
End Sub 
'
Sub Proc2() 
    Dim i As Long 

    For i = 0 To 150000 
        DoEvents 
        Label1.Caption "autre compteur en label = " & i 
    Next i 
End Sub

<small> Coloration
syntaxique automatique [AFCK] </small>
       

ici en VB6 le label1 ne va changer que quand la première procédure sera terminée.

en DotNet tu peux appeler la proc2 dans un autre thread et donc avoir les opérations en simultané.

peux pas faire plus, désolé
++
PCPT   [AFCK]
<hr size ="2" width="100%" />Prenez un instant pour répondre à ce sondage svp

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de PCPT
Messages postés
2382
Date d'inscription
jeudi 12 juillet 2001
Dernière intervention
15 décembre 2018
3
Merci
Salut,
Voici un test sur 1 ping sur 5 adresses différentes (fais sous vb2005). Chaque ping s'éxecute dans un thread à part
Essais cet exemple en créant simplement une application console et met un point d'arret sur le Console.WriteLine("Fini")
Essais avec tes 255 adresses (je sais y a un peu de boulot pour remplir tes adresses à pinger) mais je te garantis que tu mettra surement moins de 6 minutes.
Change également à la fin la durée de Sleep(5000) met plutot 300000

-------------------------------------------------------------------------

Module1

   Sub
Main()

      
      Dim thProcs(4) As Threading.Thread
      Dim coladdress As New List(Of String)(New String() {"www.vbfrance.com", "www.codeproject.com", "www.microsoft.fr", _
      "www.hotmail.fr", www.google.fr})

      For
i As Integer = 0 To coladdress.Count - 1
         Console.WriteLine(i.ToString & ")" & coladdress(i))

      Next
      
      Console.WriteLine()
      Console.WriteLine()
      Console.WriteLine("Ordre d'arrivé")
      Console.WriteLine(Strings.StrDup(10, "-"))

      For
i As Integer = 0 To thProcs.Length - 1
         thProcs(i) = New Threading.Thread(AddressOf Ping)
         thProcs(i).Start(New Object() {coladdress(i), i})

      Next

      Threading.Thread.Sleep(5000)
      Console.WriteLine("Fini")

   End
Sub

   Sub
Ping(ByVal value As Object)
   
      Console.WriteLine(String.Format("{2} {1}: Retour du ping = {0}", value(0).ToString, My.Computer.Network.Ping(value(0).ToString), value(1).ToString))

   End
Sub

End Module

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de cs_Willi
Messages postés
3
Date d'inscription
dimanche 23 juillet 2006
Dernière intervention
8 septembre 2006
0
Merci
Merci beaucoup PCPT!


Je tente d'appliquer ton conseil en espérant que ce soit une solution!
Je te tiens au courant du résultat!


Encore merci!
Commenter la réponse de Vitchoura

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.