Vitesse d'execution [Résolu]

Vitchoura 3 Messages postés dimanche 23 juillet 2006Date d'inscription 8 septembre 2006 Dernière intervention - 8 sept. 2006 à 17:39 - Dernière réponse : cs_Willi 2381 Messages postés jeudi 12 juillet 2001Date d'inscription 13 février 2015 Dernière intervention
- 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
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 8 sept. 2006 à 19:15
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

Merci PCPT 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 83 internautes ce mois-ci

Commenter la réponse de PCPT
Meilleure réponse
cs_Willi 2381 Messages postés jeudi 12 juillet 2001Date d'inscription 13 février 2015 Dernière intervention - 8 sept. 2006 à 21:12
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

Merci cs_Willi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 83 internautes ce mois-ci

Commenter la réponse de cs_Willi
Vitchoura 3 Messages postés dimanche 23 juillet 2006Date d'inscription 8 septembre 2006 Dernière intervention - 8 sept. 2006 à 20:11
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.