Fonctionne seulement en mode débogueur

Résolu
Signaler
Messages postés
40
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
10 novembre 2006
-
 OneHacker -
Salut,
   La ji comprend rien, j'ai mis beaucoup de DoEvents dans mon programmes et il reste une fonction qui n'est pas capable déffectuer si je ne suis pas en mode débogueur. Quelqu'un peu m'expliquer pourquoi ?

Merci d'avance

23 réponses

Messages postés
354
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
24 mars 2011
2
Met des msgbox a des points strategiques (avant un appel de fonction ou une instruction sur laquelle t'as un doute).

Ca te permettra de voir ou il bloque.


D@runia
Messages postés
354
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
24 mars 2011
2
Doevents qui est suposer de lui laisser le temps de se connecté à l'ordinateur

DoEvents n'est pas censé laisser de temps !
DoEvents sert a traiter les messages de la fenetre qui sont en attente. Si y a pas de message en attente ...

Pour info, voici ce que fait l'instruction DoEvents en win32 :

Private Const PM_REMOVE = &H1

Dim CurrMsg As MSG

Do While PeekMessage(CurrMsg, 0, 0, 0, PM_REMOVE) <> 0 //Extrait le message de la file (tq qu'il y en a)
TranslateMessage CurrMsg //Traduit le message
DispatchMessage CurrMsg //Envoie le message à la procedure de gestion des messages
Loop

Met un sleep a la place de ton DoEvents (???) et regarde du coté de l'instruction lock pour  l'exclusion mutuelle.

D@runia
Messages postés
40
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
10 novembre 2006

Voilà après une petite recherche sur Google.ca, voici ce que j'ai trouvé.

La commande Sleep qui à résolut mon problème.

Vous déclarer la function:
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Et vous l'utiliser comem ceci:
Sleep (1000) <= le chiffre dépend du nombre de temps que vous voulez mettre.

Un gros merci à D@runia  pour sa précieuse aide... :)
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007

Salut, l'excès de DoEvents peut nuire à la santé du prog. Tout est question de dosage. A part ça, c'est quoi la fonction ?
Messages postés
40
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
10 novembre 2006

Bah je vais te donner le boute de code ki narrive pas a avoir acces sans le mode débougeur:


 


Ce if la on dirais qui veux pas le faire si il est pas en mode débug...


If Trim(Enregistrement.strNewNick) Nick And Trim(Mid(Enregistrement.StrMessage, 1, 16)) <> "***** Quit *****" And UCase(Trim(Enregistrement.strTime)) <> "FINDIPREP" And UCase(Trim(Enregistrement.StrMessage)) "OPENPV" Then
                    PriverNickOpen = Trim(Enregistrement.strNick)
                    'Demande s'il accepte ou pas le Privé
                    Reponse = "Oui"
                    If Reponse = "Oui" Then
                        VbYes2 = "Oui"
                    'Verifie s'il est encore sur la conversation avant d'ouvrir le privé
                        EncoreLa = False
                        For i = 0 To intNbreEnregistrement
                            If Trim(TxtUser.List(i)) = Trim(PriverNickOpen) Then
                                EncoreLa = True
                                DoEvents
                                Exit For
                            End If
                        Next
                    'S'il est encore sur la conversation, l'ouvrir sinon, non.
                        If EncoreLa = True Then
                            'Enregistre le message qu'il à été accetper.
                            Enregistrement.strTime = "PVMSG"
                            Enregistrement.strNick = Nick
                            Enregistrement.StrMessage = "PVACCEPTER"
                            Enregistrement.strNewNick = PriverNickOpen
                            intNbreEnregistrement = intNbreEnregistrement + 1
                            Put #1, intNbreEnregistrement, Enregistrement
                            DoEvents
                            Winsock1.SendData ("PVMSG" & Enregistrement.strNick & Enregistrement.StrMessage & Enregistrement.strNewNick)
                            PriverOpen
                        End If
                    Else
Messages postés
354
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
24 mars 2011
2
"Il n'arrive pas a avoir acces" -> Donne des détails, comment veux tu qu'on t'aide.


 D@runia
Messages postés
40
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
10 novembre 2006

Excuse moi,

      Je m'explique.. Quand je passe le mode débogue, je le voie exactement il fait tout correctement, il éxécute le If que je vous ai montrer en haut. Lorsque je l'éxécute normalement, il n'éxécute pas le If... Comment je fait pour savoir sa ? Il n'ajoute pas le "PVACCEPTER" dans le fichier texte comme il devrais le faire et n'envoie pas de commande au serveur.

 
Messages postés
354
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
24 mars 2011
2
Bourre ton code de msgbox pour le tracer.


D@runia
Messages postés
40
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
10 novembre 2006

Pour savoir a quel point exactement il arrete ou quil fait pas ?
Messages postés
40
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
10 novembre 2006

Ok merci je vais aller esseyer cela et je te redonne des nouvelles :)
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
1
ce que veux dire darunia c'est place une MsgBox entre chaque ligne de code pour voir ou il va.

Par exemple en placant une MsgBox après le If. Si la MsgBox s'affiche c'est que le prog est bien entré dans le If. Et ainsi de suite pour voir jusqu'où va le prog.

Tu peux également faire :
MsgBox "PriverNickOpen = " & PriverNickOpen
Pour voir les valeurs prises par tes variables

Bonne prog ++
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
1
ha les messages se sont croisés, j'ai pas été assez rapide

Bonne prog ++
Messages postés
40
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
10 novembre 2006

Ouain sa je savais... c'est apres le If le programme rentre seulement en mode débug sinon il rentre pas cest fucker lol
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut,

pourquoi des MsgBox ??
Il n'y a pas le point d'arrêt avec VB2005 ?

@++

   Mortalino
Le mystérieux chevalier, "Provençal, le Gaulois"

Merci de prendre le temps de répondre à
Messages postés
40
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
10 novembre 2006

jmet des msgbox pis i block toujours, ji comprend rien :(
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
1
Mortalino>>Pas de points d'arret une fois compilé ;-)


Themik>>Alors place des points d'arret avant le If pour vérifier les conditions :


MsgBox "Trim(Enregistrement.strNewNick) = " & Trim(Enregistrement.strNewNick)
MsgBox "Nick = " & NickMsgBox "'Trim(Enregistrement.strNewNick) Nick' " & Trim(Enregistrement.strNewNick) = Nick
...
Répète l'opération pour les 3 autres conditions du If :
Trim(Mid(Enregistrement.StrMessage, 1, 16)) <> "***** Quit *****"
UCase(Trim(Enregistrement.strTime)) <> "FINDIPREP"
UCase(Trim(Enregistrement.StrMessage)) = "OPENPV"

Bonne prog ++
Messages postés
40
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
10 novembre 2006

Se boute de programmation proviens de mon timer principal de mon chat. qui s'éxécute a chaque centième de seconde:

-----------
If OpenPVOff = False Then
                DoEvents
                'Empêcher s'il n'est pas addresser à moi.
                If Trim(Enregistrement.strNewNick) Nick And Trim(Mid(Enregistrement.StrMessage, 1, 16)) <> "***** Quit *****" And UCase(Trim(Enregistrement.strTime)) <> "FINDIPREP" And UCase(Trim(Enregistrement.StrMessage)) "OPENPV" Then
                    PriverNickOpen = Trim(Enregistrement.strNick)
                    'Demande s'il accepte ou pas le Privé
                    Reponse = "Oui"
                    If Reponse = "Oui" Then
                        VbYes2 = "Oui"
------------------

Si je met mon débugueur sur le If, il s'arrête à chaque fois maios je fait F5 donc il recontinue et reviends toujours vue que c'est un timer. Mais la commande que le If est suposer faire se fait. Alors j'en conclus que c'est pas ma commande qui est mal programmer mais plutot que le programme fait sa boucle trop vite. Quelqu'un à un idée pour le faire relentir ou quelque chose la... Fait quatre jours je suit la dessus

Merci d'avance
Messages postés
354
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
24 mars 2011
2
Sache que ton Timer créer un Thread a chaque Tick !





Donc pendant que ton execution est bloquée sur la msgbox, il reexecute la procedure !





D@runia
Messages postés
40
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
10 novembre 2006

J'aimerais vraiment pourvoir résoudre se problème car j'ai plus de 100 heures de programmations dans ce programme et j'aimerais pouvoir continuer.. Alors que me conseil tu de faire pour que mon code s'éxécute correctement ?

Merci d'avance
Messages postés
40
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
10 novembre 2006

P.S:

   Il vient de me faire une second problème du même type. Voici le code:

If Client = True Then
    Winsock1.Connect Trim(TxtServeur.Text), Trim(TxtPort.Text)
    DoEvents
    If Winsock1.State <> sckConnected Then
        MsgBox "L'ordinateur hôte que vous tentez de rejoindre est indisponible ou n'est pas valide."
        Winsock1.Close
        Exit Sub
    End If
    Exit Sub
End If

En gros ce bout de code fait que si Client est cocher donc True. Il essais de se connecter au serveur et port. Doevents qui est suposer de lui laisser le temps de se connecté à l'ordinateur et ensuite indiquer s'il se connect ou pas. Encore le même type de problème, avec le debug, il fonctionne bien il se connect, sans sa il m'indique une erreur... la j'y comprend rien qu'es-ce qui fou le doevents, une parrure

expliquer mo ila jto bord de toute scraper svp...

Merci d'avance...