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 :

exécuter une fonction tout les xx secondes


Sujet :

C++

  1. #21
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 51
    Par défaut
    bonjour,

    je sollicite votre aide a nouveau.

    J'ai finalement crée une classe :
    le .h :
    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
    #ifndef MYTHREAD_H
    #define MYTHREAD_H
     
    #include "QtGui"
     
    class mythread : public QThread
    {
        Q_OBJECT
     
    public:
        mythread(QObject *parent);
        void run(); // this is virtual method, we must implement it in our subclass of QThread
    };
     
    #endif // MYTHREAD_H
    le .cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include "header/mythread.h"
     
    mythread::mythread(QObject *parent) : QThread(parent)
    {
    }
     
    void mythread::run()
    {
        ....
    }
    le probleme est que dans j'ai envie de faire appel a la tache en question a executer, or cette tache depend de qui se trouve dans la classe de la fenetre GUI ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //lancer les acquisitions (arret automoatique)
            QObject::connect(ui->Boutton_lancer,SIGNAL(clicked()), this,SLOT(calcul())); //je devrai executer le thread
    dans la classe de la fenêtre principale, je devrai avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     thread = new mythread(this);
        thread->start();
    qui me lance le sauf que dans ce run, je dois faire appel a ....
    avez-vous compris mon problème ?

    merci de votre aide

  2. #22
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 050
    Par défaut
    Je n'avait pas compris que tu étais sur QT, dans ce cas, une solution beaucoup plus simple qu'un thread.
    http://developer.nokia.com/Community...e_QTimer_in_Qt

  3. #23
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 51
    Par défaut
    je vous remercie de votre réponse, mais je pense que je suis complètement perdu en ce moment.

    Je réexplique mon problème pour essayer d’être plus clair.

    L'utilisateur spécifie un temps, par exemple 30 secondes. Il appui ensuite sur un bouton pour lancer des calculs.

    Pour ce bouton j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QObject::connect(ui->Boutton_lancer,SIGNAL(clicked()), this,SLOT(lancer()));
    ce que je veux c'est qu'une fois qu'il a appuyé sur ce bouton, les calculs se répètent toutes les 30 secondes. Ce qui implique une exécution de toutes les 30 secondes.

    En regardant QTimer, je comprends que j'ai besoin de 3 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    QTimer *timer = new QTimer(this);   
    timer->start(3000, FALSE);
    QObject::connect(timer,SIGNAL(timeout()),this,SLOT(lancer_acquisition()));
    Le problème ici est que ma fonction a executer est : qui est déjà connectée avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QObject::connect(ui->Boutton_lancer,SIGNAL(clicked()), this,SLOT(lancer()));
    et ou est-ce que je devrai mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QTimer *timer = new QTimer(this);   
    timer->start(3000, FALSE);
    je vous remercie encore pour votre aide preciseuse.

  4. #24
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 050
    Par défaut
    Pour te simplifier la tache, je serais toi, je ferais une classe de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Calculator
    {
          QTimer m_timer;
          StartCalcul();
          StopCalcul();
          lancer() ;
    };
    Donc tu pourras plus facilement faire quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QObject::connect(ui->Boutton_lancer,SIGNAL(clicked()), myCalculator,SLOT(StartCalcul()));
    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void StartCalcul()
    {
    QTimer *timer = new QTimer(this);   
    timer->start(3000, FALSE);
    QObject::connect(timer,SIGNAL(timeout()),this,SLOT(lancer()));
    }
    Tu as déjà la une bonne base qui devrais être fonctionnelle

    PS: Ici fait attention au memoryleak, je ne genre pas du tout le cas ou tu spam le click sur ton bouton

  5. #25
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par med.doc Voir le message
    En regardant QTimer, je comprends que j'ai besoin de 3 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    QTimer *timer = new QTimer(this);   
    timer->start(3000, FALSE);
    QObject::connect(timer,SIGNAL(timeout()),this,SLOT(lancer_acquisition()));
    Le problème ici est que ma fonction a executer est : qui est déjà connectée avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QObject::connect(ui->Boutton_lancer,SIGNAL(clicked()), this,SLOT(lancer()));
    Je ne comprends pas le problème ?
    Si la fonction à exécuter tous les laps de temps c'est lancer(), alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QObject::connect(timer,SIGNAL(timeout()),this,SLOT(lancer()));
    non ?
    Tu as parfaitement le droit de connecter plusieurs signaux à un seul slot, ou un seul signal sur plusieurs slots, si c'est cela qui te gêne.

  6. #26
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 51
    Par défaut
    merci pour votre réponse encore une fois.

    je viens d'essayer ce que vous m'avez dit. Question bete : a quoi correspond le myCalculator que vous avez mis dans le premier connect ?

    pourquoi déclarer un QTimer dans la classe ? Je peux directement le déclarer dans le ?

    merci encore une fois

  7. #27
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 51
    Par défaut
    effectivement c’était cela qui me dérangeais.

    merci encore pour toute votre aide !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Exécuter une fonction toutes les 2 minutes en VB.NET
    Par sihammaster dans le forum VB.NET
    Réponses: 3
    Dernier message: 14/10/2012, 01h29
  2. Exécuter une fonction toutes les X minutes ?
    Par corgato dans le forum Qt
    Réponses: 8
    Dernier message: 27/01/2009, 11h29
  3. Exécuter une macro toutes les 3 secondes
    Par lucazzo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/06/2008, 10h42
  4. Exécuter une fonction toutes les 2ms
    Par ditchou dans le forum Langage
    Réponses: 3
    Dernier message: 08/02/2008, 18h54
  5. Réponses: 7
    Dernier message: 13/01/2008, 17h52

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