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++ Discussion :

remplacement d'un timer .. ?


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Points : 24
    Points
    24
    Par défaut remplacement d'un timer .. ?
    Salut,

    J'ai deposé un post mais personne ne me reponds, j'en suppose que persoone n'a la soluce, cependant je me demandais si quelqu'un avait une idée sur la chose suivante et donc je me permets de poster ici car c'est une question d'ordre générale .. !

    Comment remplacer un timer .. . ? c.a.d ne pas rester bloqué dans une boucle, (mon soft est un multi threads ) et verifier qu'un durée variable de 0 à 60 secondes par exemple se soit ecoulée ...

    Mon post du depart : http://www.developpez.net/forums/sho...d.php?t=295345

    Si vous avez une idée ..

  2. #2
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    Tu n'as qu'à mettre un Sleep() dans ta boucle.

    Valable uniquement sur Win32.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Points : 24
    Points
    24
    Par défaut
    le Sleep() n'est pas bloquant ... ?

    J'essaye ..

  4. #4
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    Normalement c'est pas bloquant, j'ai fait ça de nombreuses fois
    et ça marche bien.

    Tiens moi au courant une fois que tu auras essayé pour me dire si ça marche.

    PS : par contre fais attention le Sleep() Win32 n'est pas portable.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Points : 24
    Points
    24
    Par défaut
    Re,

    Ca marche pas, mais c'est bizarre j'ai mis 20 secondes et rien j'ai mis 20.000 en pensant qu'il s'agissait de ms .. rien ..

    ce que je veux faire c'est ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    for(i=0;i<nbr;i++){
     tab[i]=...;
     fprintf(tab[i] ... );
     Sleep(2000);
    }
    en fait que le programme ecrive dans le ficheir ttes les n secondes ..


    a mais attends je crois savoir, (je l'ai pas déclaré .. )
    ca suffit d'inclure Windows.h .. ? Tu l'a declare bien quelquepart non .. ?


    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    #ifndef DP_CONSIGN_H
    #define DP_CONSIGN_H
    #include "DpConsign.h"
    #include <QSpinBox.h>
    #include <Qthread.h>
    #include <windows.h>
    //! Class DpConsignImpl
    /*! This class inherits of DpConsign class.
    */
    /////////////////////////////////////////////////////////////////////////////////////
    class DpConsignImpl : public DpConsign {
    /////////////////////////////////////////////////////////////////////////////////////
    Q_OBJECT
    public:
    DpConsignImpl(QString str, bool b, QWidget* parent = 0, const char* name = 0, WFlags f = 0
    );
    ~DpConsignImpl();
    FILE * stream;
    //QTimer* monTimer;
    //int cpt;
    protected :
    private slots :
    void ButtonGoRelatif();
    void ButtonGoAbsolu();
    void ButtonGisDist();
    // void Done(void);
    public slots :
    signals :
    AutoPosRelativeAction(float,float,float) ;
    AutoPosAbsoluteAction(float,float,float) ;
    AutoPosGisDistAction(float,float,float) ;
    };
    #endif // CALCULATOR_H
    1

  6. #6
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    Effectivement ca peut bloquer au niveau de la boucle si tu n'as pas déclaré ton Sleep().

    De mémoire, la fonction est déclarée dans "Windows.h".

    D'ailleurs ca n'aurait même pas dut compiler du tout ... mais tu est sur quelle plateforme de développement et quel compilateur ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 376
    Points
    376
    Par défaut
    Je reprends ton code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(i=0;i<nbr;i++){
     tab[i]=...;
     fprintf(tab[i] ... );
     Sleep(2000);
    }
    L'écriture en utilisant fprintf est bufferisée. C'est à dire qu'il n'y a pas systématiquement écriture sur le disque (ou l'écran) lors de l'appel de la fonction.
    Si tu veux que l'écriture ait lieu, ajoute un fflush après le fprintf.

  8. #8
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    Tiens je connaissait pas cette instruction, ça peut être pratique, je note.

    Et d'aprés toi, le il faut mieux le faire où et quand le fflush() pour que ça s'affiche ?
    Avant ou aprés le Sleep() ?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Points : 24
    Points
    24
    Par défaut
    Salut tous,

    mchk0123 -> J'ai deaj inclu windows.h, regarde dans mon code, mais estce qu'il faut faire qqch d'autres .. ?
    -> je pense qu'il faut le faire apres, sinon tu ecrira rien ..


    josse95- > meric pour ta reponse, mais le probleme c'est pas que j'ecris pas, c'est que j'ecirs bien justement, tout le tmp, et sans considerer le timer .. !
    genre jecris a la suite .. regardez plutot, normalement, conformement a a mon source, je dois ecrire tout les 3000 ms, eh en la non, en debug comme en exe normale, le programme affiche tout desuite .. alors je seche la , je suis bien emmerder ...


    mais j'amerais savoir si Sleep() convient deja a ce que je veux faire, car je sens qu'il va bloquer ma boucle ..

    2 min plus tard :

    Bon ben ca marche les gars .. mais c'est bloquant .. je fais quelques test, i'll be back .. (ja sais pas pourqoi le Sleep( ) s'est mis a a marcher ..

    ++

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 376
    Points
    376
    Par défaut
    En ne mettant pas le fflush, on écrit bien-sûr dans le fichier (soit quand le buffer est plein, soit quand on ferme le fichier), mais à un rythme que l'on ne contrôle pas.

    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    fprintf(...);   /* le buffer n'est pas plein. pas d'écriture disque */
    Sleep(2000);
    ...
    fprintf(...); /* buffer non plein. pas d'écriture disque */
    Sleep(2000);
    ...
    fprintf(...); /* buffer plein, le système l'écrit sur disque */
    On voit dans cet exemple que les écritures arrivent d'un seul coup. Les Sleep n'ont donc servi à rien. D'où la nécessité du fflush.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  2. comment remplacer une partie de texte dans un champs
    Par patlapi dans le forum Paradox
    Réponses: 4
    Dernier message: 20/11/2003, 14h38
  3. [] [Réseau] Anti-timer, anti-idle
    Par clonevince dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 15/01/2003, 22h19
  4. Timer de précision
    Par guigui dans le forum MFC
    Réponses: 1
    Dernier message: 04/12/2002, 15h21
  5. Timer en µsecondes
    Par Dagobert dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 25/11/2002, 00h59

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