Problème de conception d'un resume next mais avec attente

Résolu
AngeliusMefyrx Messages postés 52 Date d'inscription lundi 20 mars 2006 Statut Membre Dernière intervention 14 octobre 2007 - 2 oct. 2007 à 22:51
tiblay Messages postés 60 Date d'inscription mercredi 9 novembre 2005 Statut Membre Dernière intervention 6 janvier 2009 - 3 oct. 2007 à 00:15
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

Kristof_Koder Messages postés 918 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 27 octobre 2008 10
2 oct. 2007 à 23:34
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
3
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
2 oct. 2007 à 23:29
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


 
0
tiblay Messages postés 60 Date d'inscription mercredi 9 novembre 2005 Statut Membre Dernière intervention 6 janvier 2009
3 oct. 2007 à 00:15
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
0
Rejoignez-nous