IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Beug lors de l'envoi de bit c++ builder


Sujet :

C++Builder

  1. #1
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Par défaut Beug lors de l'envoi de bit c++ builder
    Bonjour,

    Voici un bou de mon programme,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void __fastcall TForm1::RadioButton1Click(TObject *Sender)
    {
            DLPortIO1->Port [0x378] = 0x01;
             Sleep(1000);
            DLPortIO1->Port [0x378] = 0x02;
             Sleep(1000);
            DLPortIO1->Port [0x378] = 0x04;
             Sleep(1000);
            DLPortIO1->Port [0x378] = 0x08;
             Sleep(1000);
    }
    Mon problème c'est que lorsque je lance cette séquence, le programme beug je ne peux plus rien faire mais les différents bits sont bien envoyés! et quand la séquence est fini il se débeug tout seul ... est-ce que quelqu'un serait-il pourquoi il beug lors de la séquence ?

    Merci

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Sleep(1000) endort l'application pendant 1 seconde. Donc pendant 4 secondes ton application ne répond plus, c'est tout à fait normal.

    PS : "bug" ou "bogue", mais pas "beug"

  3. #3
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    Le mieux est de poster cela sur le forum C++ Builder.
    Ici, c'est pour le C++ "en général".

  4. #4
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Par défaut
    Citation Envoyé par Laurent Gomila
    Sleep(1000) endort l'application pendant 1 seconde. Donc pendant 4 secondes ton application ne répond plus, c'est tout à fait normal.

    PS : "bug" ou "bogue", mais pas "beug"
    Comment pourrait-je faire alors pour creer un delay sans "endormir" l'application ?

  5. #5
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    Je ne connais pas vraiment le besoin, mais j'imagine qu'il faut créer un thread.

    C++Builder a une classe qui encapsule les threads si besoin est.

  6. #6
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Ou plus simplement un timer

  7. #7
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Par défaut
    non je ne peux pas utliser de timer car le timer va m'envoyer mon instruction tous les 2 ou 3 secondes comme on le souhaite, moi, je voudrais envoyer une intruction et ensuite une pause, une autre instruction, pause ...etc

  8. #8
    Membre chevronné
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Par défaut
    Si ton programme ne fait rien, entre chaque exécution du Timer, c'est comme une pause, non ?

  9. #9
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Par défaut
    comment veut-tu lancer le timer entre chaque execution ?

    merci de ton aide

  10. #10
    Membre chevronné
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Par défaut
    Ben il se lance tout seul, ça sert à ça, un timer.

  11. #11
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Par défaut
    concrètement comment veux-tu faire ? comme cela ?

    execution1;
    lancer le timer;
    execution2;
    etc...

  12. #12
    Membre éprouvé
    Inscrit en
    Mars 2002
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 105
    Par défaut
    Bonjour,

    On peut également regarder du côté de Application->ProcessMessages() pour gérer tous les messages en attente avant chaque Sleep().

    Une autre solution est d'utiliser un nouveau thread dédié uniquement à la communication. Le Sleep() ne bloquerait alors plus le thread principal. Pour plus d'infos voir l'aide de BCB6 au sujet des "Threads de service".

    Nicolas

  13. #13
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Par défaut
    [RESOLU]

    voici tout simplement la réponse (trouvé par BIB HOME)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    timer(variable=temps)
    {
    if(i==1)
            {
                    DLPortIO1->Port [0x378] = 0x01;
            }
    if(i==2)
            {
                    DLPortIO1->Port [0x378] = 0x02;
            }
    if(i==3)
            {
                    DLPortIO1->Port [0x378] = 0x04;
            }
    i++;
     
    if(i==4){i=1;}
    }

  14. #14
    Membre chevronné
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Par défaut
    Citation Envoyé par tibo7
    concrètement comment veux-tu faire ? comme cela ?
    execution1;
    lancer le timer;
    execution2;
    etc...
    Absolument pas. Un TTimer consiste à demander au système d'exécuter la fonction fournie dans l'évènement OnTimer à un intervalle de temps donné (Timer1->Interval). Ca ne se programme qu'une seule fois (voir l'aide de BCB sur TTimer).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème lors de l'envoie d'un mail (JavaMail)
    Par Invité dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 09/05/2006, 10h23
  2. [MySQL] Exécuter 2 actions lors de l'envoi d'un formulaire
    Par mathieu7497 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/03/2006, 21h16
  3. [javamail] pb lors de l'envoi d'un mail
    Par mawashee dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 08/09/2005, 16h50
  4. A respecter lors de l'envoi d'un message (Version 2)
    Par Aurelien.Regat-Barrel dans le forum Windows
    Réponses: 0
    Dernier message: 04/01/2003, 15h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo