Timeout dans une boucle

edpimi Messages postés 24 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 19 février 2015 - 4 nov. 2011 à 17:03
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 - 15 nov. 2011 à 21:49
Bonjour,
Dans mon code Vb.net ci-dessous, j'aimerais mettre un timeout de 20mins
pour pouvoir sortir de cette boucle si le répertoire reste vide.
Avez-vous une solution?
Merci

'Tant que le Nbre de fichier dans Rep est vide on boucle
NbFiles = 0
While NbFiles = 0
Dim Rep As String = "C:\Toto"
'Files est un tableau qui se remplit dès qu'un fichier arrive dans Rep
Dim files As String()= System.IO.Directory.GetFiles(Rep)
'Longueur du tableau = Nb de fichiers dans Rep
NbFiles = files.Length
End While

11 réponses

NHenry Messages postés 15025 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
4 nov. 2011 à 19:27
Bonjour,

Utilises Environment.TickCount, c'est une valeur en millisecondes, ensuiite à toi de trouver comment faire, c'est très simple.

Préfère utiliser Do/Loop à la place de While/End While.

Pour éviter de bloquer ton appli, regardes pour utiliser un thread ou un BackGroundWorker.

Pense aussi à faire une pause, pour soulager le CPU avec : System.Threadding.Thread.Sleep(1)
Tu peux même mettre plus pour éviter de faire tourner trop vite et libérer des ressources de calcul.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 6
4 nov. 2011 à 20:28
Bonjour,

Option Explicit On
Public Class Form1

  Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Timer1.Interval = 1000000
    Timer1.Enabled = True
  End Sub

  ' mettre un objet timer et dans sa procédure le code
  Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    Dim nbfiles As Byte = 0
    While NbFiles = 0
      Dim Rep As String = "C:\Toto"
      Dim files As String() = System.IO.Directory.GetFiles(Rep)
      nbfiles = files.Length
    End While
  End Sub

End Class


Si c'est ce que tu veux, le nom c'est "TIMER"

Cordialement, Joe.
0
4u4me4us Messages postés 781 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
10 nov. 2011 à 10:15
A partir du code de "EhJoe" je te propose

Option Explicit On
Public Class Form1

  Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Interval = 120000'pour avoir  les 20mins 
    Timer1.Enabled = True
  End Sub

  ' mettre un objet timer et dans sa procédure le code
  Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    Dim nbfiles As Byte = 0
   Dim files As String() = System.IO.Directory.GetFiles("C:\Toto")
    if files.Length > 0
      nbfiles = files.Length 
    End if
  End Sub

End Class


P.S. je ne vois pas très bien le rôle de nbfiles vu que tue as files.Length.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
10 nov. 2011 à 10:50
Bonjour,

moi, ce que je comprends pas, c'est l'utilisation de :
While NbFiles =  0 

alors qu'on a exprimé le voeu :
pour pouvoir sortir de cette boucle si le répertoire reste vide.


Quelle est l'utilité d'attendre alors 20mins ? dans quel but ? Comprends pas, moi !
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0

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

Posez votre question
Utilisateur anonyme
10 nov. 2011 à 13:32
Bonsoir,
Je rappelle que le framework permet de surveiller un dossier grâce au composant FileWatcher :
Option Strict On
Public Class Form1
    Dim FSW As New IO.FileSystemWatcher
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        FSW.Path = "c:\test"
        AddHandler FSW.Created, AddressOf FichierCree

    End Sub
    Private Sub FichierCree(ByVal sender As Object, ByVal e As IO.FileSystemEventArgs)
        MessageBox.Show("un fichier " & e.Name & " vient d'être créé dans " & IO.Path.GetDirectoryName(e.FullPath))
    End Sub
End Class
0
4u4me4us Messages postés 781 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
10 nov. 2011 à 13:59
Bien vu "banana32"
0
Utilisateur anonyme
10 nov. 2011 à 19:54
J'ai oublié un détail dans mon exemple car il faut indiquer au composant de réagir (ou pas avec false) aux événements avec :
FSW.EnableRaisingEvents = True

Bonne prog.
0
edpimi Messages postés 24 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 19 février 2015
15 nov. 2011 à 10:55
Merci pour ta réponse banana32
mais moi je dois attendre que un fichier se crée dans le repertoire "c:\toto" avant de continuer la suite de mon traitement
donc comment faire sans utiliser de boucle while?
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 6
15 nov. 2011 à 11:11
Bonjour,

Ben tu utilises directement... oh pardon, tu t'adressais à Banana n°32, désolé, je n'avais pas vu, je le laise répondre, cordialement, Joe.
0
Utilisateur anonyme
15 nov. 2011 à 20:16
Comme dit EhJoe, tu utilise l'événement directement en te passant de ta boucle.

@EhJoe
32 est le numéro administratif de mon département. (gers)
A bientôt.
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 6
15 nov. 2011 à 21:49
Bonsoir Banana ...


@EhJoe, 32 est le numéro administratif de mon département


Ah, enchanté, alos moi c'est 75

Cordialement, Joe.
0