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

Discussion :

Pause/reprise dans un boucle while

  1. #1
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 62
    Points : 50
    Points
    50
    Par défaut Pause/reprise dans un boucle while
    bonjour a tous

    je suis bloqué dans mon projet :p

    j'ai un widget dans lequel quand j'appuis sur un bouton "start" un texte se défilera dans une QLabel ligne par ligne.
    j'utilise une boucle WHILE pour le défilement et timer pour contrôler le temps. Tout marche bien a ce stade

    je voulais maintenant faire une PAUSE/RESUME ou CANCEL a ce boucle WHILE lorsque j'appuis sur des boutons du claviers (lettre "P" pour PAUSE , lettre "C" pour cancel ...)

    pour le SIGNAL du clavier j'utilise QKeyEvent et j'ai reussi a capter le signal mais le probleme est de faire la pause ou le resume immidiatement

    j'ai fait ça:

    widget.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ...
    public:
        void keyPressEvent(QKeyEvent *event);
     
    private slots:
        void Pause();
        void Resume();
    private:
        QMutex sync;
        QWaitCondition pauseCond;
        bool pause=false;
    ...
    widget.cpp
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    void widget::Resume()
    {
        sync.lock();
        pause = false;
        sync.unlock();
        pauseCond.wakeAll();
    }
     
    void widget::Pause()
    {
        sync.lock();
        pause = true;
        sync.unlock();
    }
     
    void widget::keyPressEvent(QKeyEvent *event)
    {
     
        switch (event->key()) {
     
        case Qt::Key_P:
            Pause();
            break;
     
        case Qt::Key_R:
            Resume();
            break;
        default:
            QWidget::keyPressEvent(event);
            break;
        }
    }
     
     
    void widget::monFonction()
    {
    ...
       while(condition)
        {
             sync.lock();
              if(pause)
              pauseCond.wait(&sync);
              sync.unlock();
     
              ... my operations ...
     
        }
    }
    la pause se fait apres la fin du boule: lorsque j'appuis sur "P" la boucle se termine puis le SLOT Pause() est exécuté et non pas au moment d'appuis

    un peu d'aide svp
    merci d'avance

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Je vous déconseille la boucle while. Elle bloquera le bon déroulement du programme Qt.
    Par contre, à la place, je vous conseille un QTimer, qui appelle la fonction de mise à jour du texte, toute les N millisecondes.
    Et lorsque vous voulez mettre en pause, vous mettez en pause le QTimer et lorsque vous voulez arrêter, vous l'arrêtez
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. [Tkinter] Méthode get() dans une boucle while
    Par Thundie dans le forum Tkinter
    Réponses: 2
    Dernier message: 04/02/2006, 00h06
  2. Problème de SCANF dans une boucle WHILE
    Par FidoDido® dans le forum C
    Réponses: 4
    Dernier message: 30/12/2005, 17h42
  3. [Conception] Problème de test dans une boucle while
    Par Cyrius dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/11/2005, 18h07
  4. Réponses: 6
    Dernier message: 17/06/2005, 16h51
  5. [MFC] Dialog dans une boucle while
    Par oxor3 dans le forum MFC
    Réponses: 5
    Dernier message: 23/04/2004, 22h51

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