Fonctionne seulement en mode débogueur

Résolu
themik Messages postés 40 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 10 novembre 2006 - 7 août 2006 à 17:13
 OneHacker - 12 avril 2007 à 15:37
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

cs_darunia Messages postés 354 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 24 mars 2011 2
7 août 2006 à 18:54
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
3
cs_darunia Messages postés 354 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 24 mars 2011 2
9 août 2006 à 09:15
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
3
themik Messages postés 40 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 10 novembre 2006
9 août 2006 à 20:47
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... :)
3
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
7 août 2006 à 17:20
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 ?
0

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

Posez votre question
themik Messages postés 40 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 10 novembre 2006
7 août 2006 à 17:22
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
0
cs_darunia Messages postés 354 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 24 mars 2011 2
7 août 2006 à 18:30
"Il n'arrive pas a avoir acces" -> Donne des détails, comment veux tu qu'on t'aide.


 D@runia
0
themik Messages postés 40 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 10 novembre 2006
7 août 2006 à 18:35
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.

 
0
cs_darunia Messages postés 354 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 24 mars 2011 2
7 août 2006 à 18:47
Bourre ton code de msgbox pour le tracer.


D@runia
0
themik Messages postés 40 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 10 novembre 2006
7 août 2006 à 18:52
Pour savoir a quel point exactement il arrete ou quil fait pas ?
0
themik Messages postés 40 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 10 novembre 2006
7 août 2006 à 18:56
Ok merci je vais aller esseyer cela et je te redonne des nouvelles :)
0
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
7 août 2006 à 18:58
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 ++
0
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
7 août 2006 à 18:59
ha les messages se sont croisés, j'ai pas été assez rapide

Bonne prog ++
0
themik Messages postés 40 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 10 novembre 2006
7 août 2006 à 19:09
Ouain sa je savais... c'est apres le If le programme rentre seulement en mode débug sinon il rentre pas cest fucker lol
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 17
7 août 2006 à 19:33
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 à
0
themik Messages postés 40 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 10 novembre 2006
7 août 2006 à 22:44
jmet des msgbox pis i block toujours, ji comprend rien :(
0
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
8 août 2006 à 09:17
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 ++
0
themik Messages postés 40 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 10 novembre 2006
8 août 2006 à 20:03
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
0
cs_darunia Messages postés 354 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 24 mars 2011 2
8 août 2006 à 20:21
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
0
themik Messages postés 40 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 10 novembre 2006
9 août 2006 à 00:15
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
0
themik Messages postés 40 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 10 novembre 2006
9 août 2006 à 09:01
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...
0
Rejoignez-nous