Problème de conception d'un resume next mais avec attente [Résolu]

Signaler
Messages postés
52
Date d'inscription
lundi 20 mars 2006
Statut
Membre
Dernière intervention
14 octobre 2007
-
Messages postés
60
Date d'inscription
mercredi 9 novembre 2005
Statut
Membre
Dernière intervention
6 janvier 2009
-
Bonjour,

Pour simplifier les choses, puisque je fais référence a un programme externe et que la rapidité de celui çi n'est pas définis, lorsque je passes des commandes sur cette même application, si un message d'erreur se produit, je veux afficher un compteur qui indique qu'une reconnection est en cour avec un compteur de 14 secondes...

Mon problème c'est que ce code ci fonctionne, mais lorsque je fais des sleep, ca gèle le programme et il vire au blanc...donc finalement mon compteur, je le vois jamais....
Que devrais-je faire pour que le programme ne sois pas gelé?

ErreurInc = 14

...

ErreurConnection:

If ErreurInc > 0 Then
    If ErreurInc = 14 Then
        Call Frm_Timer.Show(, Me)
        Frm_Timer.Lbl_Timer.Caption = "00:14"
    End If
    Sleep (1000)
    ErreurInc = ErreurInc - 1
    If Int(ErreurInc) > 9 Then
        Frm_Timer.Lbl_Timer.Caption = "00:" & ErreurInc
    Else
        Frm_Timer.Lbl_Timer.Caption = "00:0" & ErreurInc
    End If
    Sleep (1000)
    ErreurInc = ErreurInc - 1
    If Int(ErreurInc) > 9 Then
        Frm_Timer.Lbl_Timer.Caption = "00:" & ErreurInc
    Else
        Frm_Timer.Lbl_Timer.Caption = "00:0" & ErreurInc
    End If
    Resume
Else
    Call MsgBox("Erreur")
    ProgBusy = False
    Exit Sub
End If

3 réponses

Messages postés
918
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 octobre 2008
10
Utilise plutot ce bout de code. A mettre dans un module et utiliser la fonction NiceSleep() à la place de Sleep()
Private Declare Function GetTickCount Lib "kernel32" () As Long

Public Sub NiceSleep(msDelay As Long)
Dim msEnd As Long

msEnd = GetTickCount() + msDelay
Do
DoEvents
Loop While GetTickCount() < msEnd
End Sub
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
13
Salut,

Essaye cela :

Private Sub MyPause(MyTemps As Integer)


    ' Pour faire le déplacement de mes frames
     Dim Depart As Double
       
        ' init
         Depart = Timer
        
        ' Boucle
         While Timer < Depart + MyTemps
               DoEvents
         Wend


End Sub

Et à la place de : Sleep(1000) tu mets : MyPause 1


A+
Exploreur

 Linux a un noyau, Windows un pépin


 
Messages postés
60
Date d'inscription
mercredi 9 novembre 2005
Statut
Membre
Dernière intervention
6 janvier 2009

Oui ou peut etre ceci

                                For tLoop = 1 To 100      'Delais de 1 Sec
                                    DoEvents
                                    Sleep (10)
                                Next tLoop

A mettre dans un module ou autre....

Bye

TiBlay