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